横向模式下的预览方向使用 Camera2 api 顺时针旋转

Posted

技术标签:

【中文标题】横向模式下的预览方向使用 Camera2 api 顺时针旋转【英文标题】:Preview orientation in landscape mode is rotated clockwise with Camera2 api's 【发布时间】:2015-09-29 15:25:55 【问题描述】:

我使用 Camera2 api 编写了一个相机应用程序。 但是当我以横向模式打开应用程序时,预览中的对象看起来顺时针旋转了 90 度。

但我在 Potrait 模式下没有看到同样的问题。

在横向模式下导致此问题的原因是什么?

这是屏幕旋转代码:

private static final SparseIntArray ORIENTATIONS = new SparseIntArray();

static 
    ORIENTATIONS.append(Surface.ROTATION_0, 90);
    ORIENTATIONS.append(Surface.ROTATION_90, 0);
    ORIENTATIONS.append(Surface.ROTATION_180, 270);
    ORIENTATIONS.append(Surface.ROTATION_270, 180);

【问题讨论】:

您的相机预览视图使用什么? SurfaceView、TextureView 还是其他? 如果您找到任何解决方案,我也会对您的解决方案感兴趣。 @EddyTalvala,就我而言,我使用的是 SurfaceView Tash Pemhiwa:您可能想提出一个新问题,详细介绍您自己的案例,因为这个问题还没有得到澄清。 【参考方案1】:

我遇到了同样的问题 - 这是因为默认的相机传感器方向可能是 90 度或 270 度,具体取决于您的设备。为了将相机输出渲染到屏幕上,在设置相机输出时需要进行相当多的预处理。

Google 官方示例中的方法 setUpCameraOutputs(int width, int height) 显示了如何执行此操作(https://github.com/googlesamples/android-Camera2Basic/blob/master/Application/src/main/java/com/example/android/camera2basic/Camera2BasicFragment.java)。基本上,它会检查相机的传感器方向并确定是否需要旋转预览区域。

【讨论】:

以上是关于横向模式下的预览方向使用 Camera2 api 顺时针旋转的主要内容,如果未能解决你的问题,请参考以下文章

Camera2 API预览方面已损坏

纵向模式下的相机横向预览

Android Camera2 以 4:3 纵横比预览和捕捉,但宽度 > 高度

如何确定相机预览帧的默认方向?

在 camera2 apis 中预览延伸

Android Camera2 API:捕获视频而不预览