【问题标题】:Camera2 preview stretched when cropping with SCALER_CROP_REGION使用 SCALER_CROP_REGION 裁剪时,Camera2 预览被拉伸
【发布时间】:2017-05-11 14:08:58
【问题描述】:

我想使用 camera2 api 在全屏 中显示预览。我选择的相机尺寸是 4160x3120 (16:9),我的屏幕是 1080x1920 (9:16)。因此,如果我希望预览正确缩放,我必须裁剪相机输出:

Rect zoomCrop = new Rect(0, 0, 1755, 3120);
captureRequestBuilder.set(CaptureRequest.SCALER_CROP_REGION, zoomCrop);

裁剪后的预览尺寸应为 1755x3120,其比例也是 9:16。预览仍然被拉伸。

问题: 我是否正确使用SCALER_CROP_REGION?如果没有,我应该如何使用它?

提前致谢

【问题讨论】:

    标签: android scale crop preview android-camera2


    【解决方案1】:

    我一直在为同样的问题苦苦挣扎,因为我想在 square TextureView 中实现相机预览流。

    使用SCALER_CROP_REGION 似乎是解决不兼容纵横比问题的明显场所,但我认为该操作不会真正改变结果的纵横比,因此它不会防止拉伸/变形行为。 (the docs talk about this)

    通过实现与 Camera2Basic 示例项目中的转换类似的转换,我取得了进展 - 请参阅 Camera2BasicFragment 中的函数 configureTransform

    使用这种视图级缩放矩阵,您可以在不改变视图大小的情况下管理相机预览的缩放/裁剪。

    【讨论】:

      【解决方案2】:

      听起来您正在获取横向图像并在纵向视图中显示它 - 这意味着如果您想避免失真,您将在图像上方和下方有“邮筒”线。

      如果您确实想填满屏幕,并且没有失真或柱箱线,那么您将不得不接受图像的一部分将不可见,因为它超出了查看区域的形状。

      如果没有图表,SCALER_CROP_REGION 很难理解 - 我在这里的 Andoir 源文档中找到了最好的解释:https://source.android.com/devices/camera/camera3_crop_reprocess

      从中复制的一个图表作为示例在这里有所帮助 - 突出显示这一点的原因是为了显示坐标的使用方式。如果您查看您的裁剪区域,当您从 (0,0) 开始时,它会偏向左上角,我不确定这是否是您真正想要的。

      【讨论】:

      • 是的,这正是我想要你做的,“隐藏”图像的某些部分。我虽然使用 scaler_crop_region 会自动完成,但似乎不是......你知道如何隐藏图像的某些部分以全屏显示预览吗?
      • Camera2 似乎有许多关于方向的未解决问题和问题(例如stackoverflow.com/q/33479004/334402)。听起来您希望您的应用程序以纵向使用,但以横向记录。我猜测失真的发生是因为您使用与视图不同纵横比的图像“填充”视图。你用过显示器吗
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-22
      • 2017-05-08
      • 1970-01-01
      相关资源
      最近更新 更多