java - camera.setPreviewCallback 旋转图像

标签 java android android-studio android-camera

我需要在方法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/

相关文章:

java - 如何在java中从Mongo子文档中获取特定数据?

java - Java 中跳过方法执行

java - 关于模拟javamail

java - 谷歌端点前端

java - "implicit anonymous class parameter"在这种情况下是什么意思?

java - 仅 Galaxy Note 2 和 3 中的 OutofMemoryError

java - 如何更改 Netbeans 12.2 的默认 SDK?

java - inflate() 后文本未出现在 TextView 框中

java - 奥利奥 : android. content.res.Resources$NotFoundException

android - OpenCV,安卓 : Detecting an object from an image instead of real-time detection