Android,前后相机定位,风景

在我的相机应用程序中,您可以在前后相机之间切换。 当我用后视镜拍照时,图像和预览显示一样。 但是当我切换到前置摄像头的时候,画面是镜像的,我认为前后摄像头都是处于横向模式。 我已经尝试了几乎所有的答案。

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

Solutions Collecting From Web of "Android,前后相机定位,风景"

我find了答案,做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)。 有一个function,他们可以帮助开发网站:

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