我需要在方法camera.setPreviewCallback(new PreviewCallback(){ Android 以横向模式保存图像,而我需要以纵向模式保存图像。 有没有办法直接旋转byte[]数据?
最佳答案
您不需要旋转字节数据。您可以使用下面的代码简单地设置相机的旋转(假设变量 camera
是您的 Camera
实例:
Camera.Parameters params = camera.getParameters();
params.setRotation(90);
camera.setParameters(params);
并且可以通过调用camera.setDisplayOrientation(90);来专门设置预览旋转;
以下是自动检查手机方向并相应显示相机预览和保存的图像旋转的快速方法:
int rotation = activity.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;
}
int result;
if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
result = (info.orientation + degrees) % 360;
result = (360 - result) % 360; // compensate the mirror
} else { // back-facing
result = (info.orientation - degrees + 360) % 360;
}
params.setRotation(result);
camera.setDisplayOrientation(result);
camera.setParameters(params);
请注意,所有这些都假设您仍在使用 Camera
类,该类在 API 21+ 中已弃用。但是,替换它的 Camera2 api 仅在 21+ 中可用。
关于java - camera.setPreviewCallback 旋转图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33874454/