Android Camera2帧水平反转

问题描述 投票:2回答:1

我想水平地反转来自Surface制作的TextureView物体的帧。我能做的是将变换矩阵设置为这个TextureView实例,而我postScale为-1,x为1,y为1(保持不变),而postTranslate dx在视图的整个宽度上,并保持dy不变(0F)。

但是当我将设备旋转90度(水平)并关闭屏幕时出现问题:图像旋转180度,当然,它完全有意义,因为xy轴没有改变。

如何解决?是否可以通过这种方式使用翻译矩阵来解决此问题?或者可能使用OpenGL ES工具?

P.S。:奇怪的是,与设备旋转本身相比,旋转两次完成两次,例如当我将设备旋转90度时 - 预览旋转180度。

P.S.S。:我试图使用MatrixsetPolyToPoly方法反转预览......并且得到了完全相同的结果。

P.S.S.S。:同样,使用open gl来实现目标,使用简单的比例和旋转变换为模型和投影基质,并得到完全相同的结果!

更新:

这些是描述前置摄像头默认行为的屏幕截图 - 默认情况下HAL应用帧反转,我无法读取文本;仍然,我是否旋转设备 - “框架方向”不会改变:

Default behavior in portrait orientation

Default behavior in landscape orientation

这些是我应用时的截图,例如Matrix.scaleM(modelMatrix, 0, -1F, 1F, 1F);,然后将此矩阵应用于进入顶点着色器的每个坐标,所以我现在可以阅读文本,因为我自己应用了反演,因此HAL的反演与我的自定义反演将导致反转缺失,但是当我旋转我的设备时(旋转设备方向改变,当然,这就是禁用) - 我会看到自己翻转过来,当然,这是完全合理的,因为设备的坐标系赢得了'改变。不过,我希望能够以某种方式避免设备旋转本身的图像旋转(就像在默认模式下 - 设备是否旋转 - 预览图像只是“不关心”),并且仍然能够读取文字(我的意思是,像在肖像模式)。

Customized behavior in portrait mode - works as needed Customized behavior when device is rotated (but configuration is portrait anyway) - flipped upside down instead of horizontally

android matrix opengl-es rotation android-camera2
1个回答
1
投票

你在前置或后置摄像头上运行测试吗?通常只需要将前置摄像头框架水平翻转,而不是后置摄像头。

无论如何,如果您需要基于设备方向的不同转换,您需要detect orientation changes in your Activity。当设备旋转时,相机不会自动执行任何操作,无论您选择哪种转换方法,都可以获得相同的结果。

更新#2

我刚刚意识到,如果在管道中的适当时刻应用转换,则可以解决此问题。我将展示一个工作示例,它广泛使用OpenGL,但我希望你能找到一些有用的东西。看到这个code fragment,它使用顶点着色器来变换坐标。在drawFrame(),有一个电话给getTransformMatrix()。不是执行此调用,而是从执行类似任务时编写的this method中获取矩阵。

© www.soinside.com 2019 - 2024. All rights reserved.