【问题标题】:How to keep android from inverting the image from the front facing camera?如何防止android反转前置摄像头的图像?
【发布时间】:2012-05-10 10:53:52
【问题描述】:

我的摄像机应用程序确实在横向模式下录制,但前置摄像头预览常规图像,但实际录制在轴上镜像(翻转或倒置)。

在普通后置摄像头上一切正常。

任何人都可以建议我一种避免它的方法吗?任何建议或源代码都会有很大帮助。谢谢你。

【问题讨论】:

标签: android video camera recording


【解决方案1】:

坏消息:此镜像已硬编码到相机服务中,无法禁用。

好消息:如果您使用的是最近的 API(API 级别 >= 14),您可以轻松地使用 TextureView 将预览图像镜像回原始图像。在 Android 文档中获取TextureView Example,然后使用setTransform 设置镜像转换。这会将预览图像恢复为未镜像的原始图像。

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

如果您使用的是较旧的 API 版本,您或许可以对 SurfaceView 执行相同操作(使用 setScaleX,API 级别 >= 11)。

【讨论】:

  • @Paul-Jan 你能给我一个带有 setTransform 的示例代码来翻转预览吗
  • setScaleX(-1) 导致黑色 SurfaceView (API 21)。
  • 有什么方法可以保存图像而不反转?不仅显示它?
【解决方案2】:

尝试将转换矩阵应用于 TextureView。根据Prevent flipping of the front facing camera

这适用于 API 级别 >= 14

【讨论】:

    【解决方案3】:

    如果您使用此代码,您可以将相机图片镜像更改为精确预览

    ImageCapture.Metadata metadata = new ImageCapture.Metadata();
                    metadata.setReversedHorizontal(true); // This method will fix mirror issue
                    options = new ImageCapture.OutputFileOptions.Builder(imageOutFile).setMetadata(metadata).build();
    

    【讨论】:

      【解决方案4】:

      在 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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多