Android, передняя и задняя камера Ориентация, пейзаж

В приложении для камеры вы можете переключаться между передней и задней камерами. Когда я делаю снимки с задней камерой, картина такая же, как и в режиме предварительного просмотра. Но когда я переключаюсь на переднюю камеру, изображение зеркально. Я думаю, что есть что-то такое, что передняя и задняя камера находятся в ландшафтном режиме. Я пробовал почти все ответы на SO.

Это действительно помогло бы, если бы кто-нибудь мог указать мне в правильном направлении.

Solutions Collecting From Web of "Android, передняя и задняя камера Ориентация, пейзаж"

Я нашел ответ, выполнив mCamera.setDisplayOrientationa(int degrees); не помогло. Мне нужно было отобразить сгенерированное растровое изображение, чтобы получить результат, который я хотел. Я использовал метод Matrix для достижения этого.

 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) 

Вопрос с передней камерой был определен как особый для Android 4.0+. Поэтому после того, как вы расшифровали байтовый массив в методе «onPictureTaken»,

  @Override public void onPictureTaken(byte[] data, Camera camera) { Bitmap photo = BitmapFactory.decodeByteArray(data,0,data.length); photo = rotateBitmap(photo); //.....do some stuff } 

Просто вызовите rotateBitmap, чтобы повернуть растровое изображение

  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; } 

Я думаю, что вы ищете setDisplayOrientation (int). Есть функция, которая может помочь на сайте dev:

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