2012-04-30 27 views
9

De acuerdo con Android desarrollador del sitio:cámara androide de vista previa Rotación

después de Android 2.2 no es la función

"setDisplayOrientation"

para ajustar la rotación de la cámara de vista previa.

Y también de acuerdo con el sitio del desarrollador de Android, podemos encontrar el siguiente código fuente.

android.hardware.Camera.CameraInfo info = 
      new android.hardware.Camera.CameraInfo(); 
    android.hardware.Camera.getCameraInfo(cameraId, info); 
    int rotation = activity.getWindowManager().getDefaultDisplay().getRotation(); 
    int degrees = 0 ; 
    switch (rotation) { 
     case Surface.ROTATION_0 : degrees = 0 ; break ; 
     case Surface.ROTATION_90 : degrees = 90 ; break ; 
     case Surface.ROTATION_180 : degrees = 180 ; break ; 
     case Surface.ROTATION_270 : degrees = 270 ; break ; 
    } 
    int result ; 
    if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { 
     result = (info.orientation + degrees) % 360 ; 
     result = (360 - result) % 360 ; // compensate the mirror 
    } else { // back-facing 

     result = (info.orientation - degrees + 360) % 360 ; 

    } 

Sin embargo, no puedo trabajar con algún tipo de dispositivo. Como Samsung Galaxy Y S5360, S5660, YP-G1, YP-G70, etc.

Simplemente parte de la máquina no funciona, Galaxy Nexus, SII, o algún dispositivo de alta gama, funciona bien.

¿No es compatible setDisplayOrientation, o el firmware de los dispositivos no está listo?

PS. Todos los dispositivos son Android 2.3.1 o superior.

Ayuda.

+0

Me enfrenta el mismo problema en mi Galaxy Y. ¿Encontraste algo? Me gustaría saber si al menos si setDisplayOrientation fue exitoso, para bloquearlo en landscape si no. –

+0

por fin, no resuelto. simplemente haga que la actividad de la superficie de la cámara sea horizontal. –

+0

¿Alguien tiene una lista de dispositivos en los que se produce este error? Cualquier ayuda sería apreciada. – patrickfdsouza

Respuesta

-3

Intente configurar la orientación de la vista de la cámara xml en horizontal.

+1

No es una respuesta realmente útil si el OP no quiere un paisaje, no le preguntaría cómo obtener el retrato en primer lugar. – Shirkrin

+0

@Shirkrin la respuesta parece rara en el primer lugar. Pero el hecho es que, en algunos dispositivos, la vista previa de la cámara está fijada en el paisaje. Si ajusta el xml de la vista previa de la cámara a horizontal, se ajustará a todo el dispositivo. Lo que harás a continuación es usar la matriz para rotar la imagen tomada por la cámara. – dumbfingers

+0

Esto no tiene trabajo. –

3

El problema de configurar la visualización de orientación de la cámara no funciona en la versión del sistema operativo de estos dispositivos, que es básicamente el (gingerbread) pero para los dispositivos anteriores funciona bien.

Intenté esto también en estos dispositivos el modo paisaje funciona bien pero el modo retrato tiene el problema. En caso de forzar a vertical simplemente obligado a la orientación de la cámara a 90 grados por esto en

public void surfaceChanged(SurfaceHolder holder, int format, int width, 
    int height) { 

camera.setDisplayOrientation(90); 


} 

, así como lo hizo después girar la imagen antes de mostrar o guardarla a través en

PictureCallback myPictureCallback_JPG = new PictureCallback(){ 


    public void onPictureTaken(byte[] arg0, Camera arg1) { 

    Bitmap bitmapPicture= BitmapFactory.decodeByteArray(arg0, 0, arg0.length); 
     Matrix matrix = new Matrix(); 
    matrix.postRotate(90); 
    int height=bitmapPicture.getHeight(); 
    int width=bitmapPicture.getWidth(); 
    Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmapPicture,height,width, true); 
     Bitmap rotatedBitmap = Bitmap.createBitmap(scaledBitmap , 0, 0, scaledBitmap.getWidth(), scaledBitmap.getHeight(), matrix, true); 
} 

Esperamos que esta AYUDA

Cuestiones relacionadas