0

我使用表面视图来预览我的应用程序中的前置摄像头视图,让用户拍摄他/她的脸。我希望预览的方向与设备方向同步,因此当用户旋转设备时,相机预览也会旋转。以下是我的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。

4

1 回答 1

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 或画布上之前,将其与位图一起使用,如下所示:-

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

于 2013-09-11T14:00:10.020 回答