防止前置摄像头翻转

11

我正在尝试访问安卓前置摄像头的原始视频流。默认情况下,前置摄像头的预览会水平翻转,这样用户就可以看到自己,就像看着镜子一样 - 这很好,但不是我需要的。获取原始视频流的最佳方法是什么?有没有办法禁用自动翻转,或者我应该尝试在代码中进行翻转?我的应用程序需要实时显示前置摄像头的视频流,而不像镜子一样翻转。

2个回答

12

如果您想使用前置摄像头进行条形码扫描,可以使用TextureView并对其应用变换矩阵。当纹理更新时,您可以读取图像数据并使用它。

请参见https://github.com/hadders/camera-reverse

特别是从MainActivity.java文件中。

mCamera.setDisplayOrientation(90);
Matrix matrix = new Matrix();
matrix.setScale(-1, 1);
matrix.postTranslate(width, 0);
mTextureView.setTransform(matrix);

嘿,@GreenFox Fox。我刚刚克隆了repo并从命令行运行了“gradle installDebug”,然后安装到了我的Nexus 5上。这个程序可以运行。但是当我启动应用程序并输入一些文本“ABC”时,它在屏幕上显示的是“ABC”,而不是预期的倒置的“CBA”。请问问题出在哪里? - Steve
嘿,@GreenFox。 "nothing works" 是什么意思?你应该能看到一张图片。由于这个帖子是关于前置摄像头的,所以你必须有一部带有前置摄像头的手机。 - Steve
下载的项目里面没有任何类或其他东西。 - jofftiquez
嘿 @GreenFox。这里只有一个类:一个活动。在这里:https://github.com/hadders/camera-reverse/blob/master/CameraReverse/src/main/java/com/hadders/camerareverse/MainActivity.java。我建议你学习一下AndroidStudio。 - Steve
1
非常感谢您的正确答案!请确保检查使用的相机,并在切换到后置相机时设置setTransform(null)。 - colintheshots
显示剩余3条评论

1

前置摄像头的数据是按照摄像头所看到的方式呈现的,就像它在看着你一样。图像的左侧是你的右侧。我想这已经是你想要的了吧?当放置在SurfaceView上时,它会被翻转,以便按照你所说的方式操作,但这是一个单独的外观变换。

至少,这是我见过的每个设备都是这样工作的,我已经努力研究了这个问题,以实现条形码扫描仪/条形码扫描仪+的前置摄像头支持。


这很有道理。事实上,我正在尝试使用SurfaceView进行渲染 - 我应该采取什么方法? - daedalus28
啊,那我就不知道了。我认为你需要接收图像数据并手动绘制到“View”上。或者也许你需要手动翻转它,因为它会被重新翻转。我从未亲自涉及这方面,只是让它将任何想要的东西投射到“SurfaceView”上,同时我单独监听数据。 - Sean Owen
我也想在SurfaceView中将其呈现为非镜像。你找到解决方案了吗? - Mark
@SeanOwen,你找到翻转 Surface View 以查看非镜像预览的解决方案了吗?我正在为解决方案而苦苦挣扎。 - Aswathy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接