如何将前置摄像头预览方向与设备方向同步?

时间:2013-09-03 09:54:20

标签: java android camera orientation

我使用surfaceview在我的应用程序中预览前置摄像头视图,让用户拍摄他/她的脸部照片。我希望预览的方向与设备方向同步,因此当用户旋转设备时,相机预览也会旋转。以下是我的surfaceCreated:

@Override
public void surfaceCreated(SurfaceHolder holder) {
  camera = openFrontFacingCamera();
  if (camera != null) {
    try {
      camera.setDisplayOrientation(90);
      camera.setPreviewDisplay(cameraPreview.getHolder());
      camera.startPreview();
    } catch (Exception e) {
      e.printStackTrace();
    }
  } else {
    myActivity.finish();
  }
}

这会在旋转设备时旋转预览,但不是正确的方式。如果我将手机设置为纵向模式,则可以使用此代码。但在两种横向模式下,预览均为90度。如何才能使预览始终直线? (除了反向肖像,我认为手机无论如何也不会旋转)。 我不在乎图像是否被镜像,很多人似乎都有问题,但它与我的应用程序无关。我只是希望它总是有顶端,你知道......最重要的是:D。

1 个答案:

答案 0 :(得分:1)

请勿使用该行: -     camera.setDisplayOrientation(90);

然后使用Matrix类进行旋转或正确定位。

Matrix matrix = new Matrix();
if (cameraPlugin.getCurrentCamId() == MyCameraInfo.CAMERA_FACING_FRONT)
    matrix.preScale(-1.0f, 1.0f);
matrix.postRotate(90);

在此之后,在SurfaceView或canvas上设置之前,将此矩阵对象与下面的位图一起使用: -

mBitmap = Bitmap.createBitmap(mBitmap,0,0,mBitmap.getWidth(),mBitmap.getHeight(),matrix,true);