Android,前后摄像头Orientation,Landscape

时间:2011-11-30 20:10:55

标签: java android camera landscape

在我的相机应用程序中,您可以在前后相机之间切换。 当我用后置摄像头拍照时,图像与预览显示相同。 但是当我切换到前置摄像头时,图像就是镜像。我认为前后摄像头处于横向模式是有目共作的。 我已经尝试了几乎所有给出的答案。

如果有人能指出我正确的方向,那将会非常有帮助。

3 个答案:

答案 0 :(得分:21)

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

答案 1 :(得分: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;
}

答案 2 :(得分:0)

我认为您正在寻找setDisplayOrientation(int)。他们有一个可能对开发站点有帮助的功能:

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