Android, фронтальная и задняя камеры, Ориентация, Пейзаж - PullRequest
10 голосов
/ 01 декабря 2011

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

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

Ответы [ 3 ]

21 голосов
/ 02 декабря 2011

Я нашел ответ, выполнение 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)
4 голосов
/ 22 июня 2015

Проблема с фронтальной камерой была определена как специфическая для 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;
}
0 голосов
/ 01 декабря 2011

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

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

...