我知道已经存在这样的问题,但没有人解决它。我拿了一些帮助,找出了相对于显示器更换相机所需的基本代码。
cameraInfo=new Camera.CameraInfo();
camera.getCameraInfo(camId,cameraInfo);
int angle=0;
int rotation = getActivity().getWindowManager().getDefaultDisplay()
.getRotation();
switch(rotation)
{
case Surface.ROTATION_0:
parameters.setPreviewSize(s.width, s.height);
Log.i(TAGR, "THE ROATTION IS 0");
camera.setDisplayOrientation(90);
break;
case Surface.ROTATION_90:
parameters.setPreviewSize(s.width, s.height);
Log.i(TAGR, "THE ROATTION IS 90");
camera.setDisplayOrientation(0);
break;
case Surface.ROTATION_180:
parameters.setPreviewSize(s.width, s.height);
Log.i(TAGR, "THE ROATTION IS 180");
camera.setDisplayOrientation(0);
break;
case Surface.ROTATION_270:
parameters.setPreviewSize(s.width, s.height);
Log.i(TAGR, "THE ROATTION IS 270");
camera.setDisplayOrientation(180);
break;
default:
camera.setDisplayOrientation(0);
break;
}
}
但是,我无法获得有关设备旋转的正确显示预览。我尝试了几种不同的角度组合。但是,没有人给我正确的输出。我正在附上我的预览图像。请解释问题的解决方案。此外,我想知道我的设备的哪个位置对应于角度0,90,180和270.换句话说,0对应于纵向还是横向?
图片: 在这一个景观倒置。我在ROTATION_180时尝试将旋转设置为180。这样做并没有成功,因为另一个方向(在风景中)变得倒置
颠倒的方向没有任何作用。所需的结果是按下单击按钮并进行正确的预览。我不知道为什么这不起作用。我在每个轮换中尝试了几个值,但没有一个解决了这个问题。
我是初学者,所以请详细解释。感谢。
答案 0 :(得分:1)
您应该检查设备的CameraInfo.orientation
。请注意,此属性通过Display.getRotation()
为设备提供自然显示方向的旋转。
如果您的自定义相机应用使用android.hardware.camera2
API,则会自动进行此补偿。
如果您的自定义相机活动没有锁定屏幕方向,那么它将受到"反向风景"故障,需要 special treatment ,其中涉及 OrientationEventListener 。
答案 1 :(得分:0)
您可以在预览之前像这样旋转图像:
public static Bitmap rotateImage(Bitmap bitmapSrc) {
Matrix matrix = new Matrix();
matrix.postRotate(previewRotation);
return Bitmap.createBitmap(bitmapSrc, 0, 0,
bitmapSrc.getWidth(), bitmapSrc.getHeight(), matrix, true);
}
“previewRotation”可以从:
获得 private static void setCameraDisplayOrientation(Context mContext, android.hardware.Camera.CameraInfo info) {
int rotation = ((CameraActivity) mContext).getWindowManager().getDefaultDisplay()
.getRotation();
int degrees = 0;
switch (rotation) {
case Surface.ROTATION_0:
degrees = 0;
break;
case Surface.ROTATION_90:
degrees = 90;
break;
case Surface.ROTATION_180:
degrees = 180;
break;
case Surface.ROTATION_270:
degrees = 270;
break;
}
if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
previewRotation = (info.orientation + degrees) % 360;
previewRotation = (360 - previewRotation) % 360; // compensate the mirror
} else { // back-facing
previewRotation = (info.orientation - degrees + 360) % 360;
}
mCameraInstance.setDisplayOrientation(previewRotation);
}