我使用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。
答案 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);