Android,前后摄像头方向,横屏定位

10
在我的相机应用程序中,您可以在前置和后置摄像头之间切换。当我使用后置相机拍照时,照片与预览显示的相同。但是,当我切换到前置摄像头时,照片会被镜像。我认为这与前后摄像头处于横向模式有关。我已经尝试了SO上提供的几乎所有答案。 如果有人能指点我正确的方向,那将非常有帮助。
3个回答

20

我找到了答案,使用 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)

@MaikelBollemeijer 真的很有帮助。谢谢。 - M D
有趣的是,我需要绕z轴旋转。如果有人知道如何使用camera2 API实现这一点,请回答。 - Rushi M Thakker
@RushiMThakker 抱歉,伙计,我已经离开Android开发领域有一段时间了。 - Maikel Bollemeijer
@MaikelBollemeijer 没问题,我解决了。你的回答很有帮助。谢谢。 - Rushi M Thakker

4
前置摄像头问题是针对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;
}

你的答案与已提供的被接受的答案有何不同? - Maikel Bollemeijer
1
这对初学者来说更易于阅读和理解。这就是我添加完整答案的原因。在上面的答案中没有明确说明在哪里执行此操作。此外,在上面的答案中缺少“preRotate()”方法。 - Timo Schuck

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接