tutorial studio permission open intent example development developer custom app java android camera landscape

java - studio - open camera android developer



Android, orientación frontal y posterior de la cámara, paisaje (3)

Creo que estás buscando setDisplayOrientation (int). Hay una función que tienen que podría ayudar en el sitio de desarrollo:

http://developer.android.com/reference/android/hardware/Camera.html#setDisplayOrientation%28int%29

En mi aplicación de cámara, puedes cambiar entre la cámara frontal y la trasera. 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 ve reflejada. Creo que tiene algo que ver con que la cámara frontal y posterior esté en modo horizontal. He intentado casi todas las respuestas dadas en SO.

Realmente ayudaría si alguien pudiera señalarme en las direcciones correctas.


Encontré la respuesta, haciendo mCamera.setDisplayOrientationa(int degrees); no ayudó. 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)


Se determinó que el problema con la cámara frontal era específico de Android 4.0+. Entonces, después de decodificar la 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 }

simplemente llame a 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; }