2011-11-30 43 views
10

En mi aplicación de cámara, puede cambiar entre la cámara frontal y posterior. Cuando tomo una fotografía con la cámara trasera, la imagen es la misma que muestra la vista previa. Pero cuando cambio a la cámara frontal, la imagen se refleja. Creo que tiene algo que ver con que la cámara frontal y trasera esté en modo horizontal. He intentado casi todas las respuestas dadas en SO.Android, cámara frontal y trasera Orientación, paisaje

Realmente ayudaría si alguien pudiera señalarme en la dirección correcta.

Respuesta

19

he encontrado la respuesta, haciendo mCamera.setDisplayOrientationa(int degrees); no ayuda. Tuve que duplicar el mapa de bits generado para obtener el resultado que quería. Usé el método Matrix para lograr esto.

float[] mirrorY = { -1, 0, 0, 0, 1, 0, 0, 0, 1}; 
Matrix matrix = new Matrix(); 
Matrix matrixMirrorY = new Matrix(); 
matrixMirrorY.setValues(mirrorY); 

matrix.postConcat(matrixMirrorY); 

image = Bitmap.createBitmap(mBitmap, 0, 0, frame.getWidth(), frame.getHeight(), matrix, true) 
+2

fresca, gracias por publicar la respuesta. – craniumonempty

+2

No hay problema;), me alegro de poder ayudar –

+0

@MaikelBollemeijer Realmente útil. Gracias –

5

Se determinó que el problema con la cámara frontal era específico de Android 4.0+. Así que después de descifrado el de matriz de bytes en el método "onPictureTaken"

@Override 
    public void onPictureTaken(byte[] data, Camera camera) { 

    Bitmap photo = BitmapFactory.decodeByteArray(data,0,data.length); 
    photo = rotateBitmap(photo); //.....do some stuff  } 

a llamarlo rotateBitmap para rotar el mapa de bits

private Bitmap rotateBitmap(Bitmap bitmap){ 

    Matrix rotateRight = new Matrix(); 
    rotateRight.preRotate(90); 

    if(android.os.Build.VERSION.SDK_INT > 13 && CameraActivity.frontCamera) 
    { 
     float[] mirrorY = { -1, 0, 0, 0, 1, 0, 0, 0, 1}; 
     rotateRight = new Matrix(); 
     Matrix matrixMirrorY = new Matrix(); 
     matrixMirrorY.setValues(mirrorY); 

     rotateRight.postConcat(matrixMirrorY); 

     rotateRight.preRotate(270); 
    } 

    final Bitmap rImg= Bitmap.createBitmap(bitmap, 0, 0, 
      bitmap.getWidth(), bitmap.getHeight(), rotateRight, true); 
    return rImg; 
} 
+0

¿En qué se diferencia su respuesta de la respuesta aceptada que ya se proporcionó? –

+1

Esto es mucho más legible y comprensible para los principiantes. Es por eso que agregué esta respuesta completa. En la respuesta anterior, no se dice claramente dónde hacer esto. Además de en la respuesta anterior, falta el método "preRotate()". –

Cuestiones relacionadas