如何防止安卓前置摄像头翻转图像?

17

我的视频相机应用程序可以在横屏模式下录制视频,但前置摄像头预览的图像是普通的,实际录制的视频会通过轴镜像(翻转或倒置)。

正常后置摄像头一切运作良好。

有没有人能建议我避免这种情况?任何建议或源代码都将对我有所帮助。谢谢。


你看过这个网址吗?https://dev59.com/wGkw5IYBdhLWcg3wn8CO#17569915这适用于API >= 14。 - Steve
4个回答

11

坏消息:这种镜像是硬编码在相机服务中的,无法禁用。

好消息:如果您使用的是较新的API(API级别>= 14),则可以轻松使用TextureView将预览图像镜像回原始图像。请参阅Android文档中的TextureView示例,然后使用setTransform设置一个镜像变换。这将使预览图像恢复到非镜像的原始状态。

请注意,镜像变换与X轴上-1比例的缩放变换相同。

如果您使用的是旧API版本,则可能可以使用SurfaceView完成相同的操作(使用setScaleX,API级别>= 11)。


@Paul-Jan,你能给我一个使用setTransform翻转预览的示例代码吗? - Aswathy
2
setScaleX(-1) 在 API 21 中会导致黑色的 SurfaceView - TWiStErRob
有没有办法在不翻转图像的情况下保存它?而不仅仅是显示它? - DAVIDBALAS1

4

4
您可以使用以下代码将相机图片镜像更改为精确预览。
ImageCapture.Metadata metadata = new ImageCapture.Metadata();
                metadata.setReversedHorizontal(true); // This method will fix mirror issue
                options = new ImageCapture.OutputFileOptions.Builder(imageOutFile).setMetadata(metadata).build();

1
请注意,应检查lensFacing == CameraSelector.DEFAULT_FRONT_CAMERA因为它会翻转一切。 - Marina

0

在OpenCV JavaCameraView中;

public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
    imageMat = inputFrame.rgba().t();
    if (//horizontal reverse)
        Core.flip(imageMat, imageMat, 1);
    else //for vertical reverse
        Core.flip(imageMat, imageMat, -1);

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