使用SCALER_CROP_REGION进行裁剪时,Camera2预览会拉伸

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

我想使用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
2个回答
3
投票

我一直在努力解决同样的问题,因为我想将相机预览流实现为方形TextureView。

使用SCALER_CROP_REGION似乎是解决不兼容宽高比问题的明显地方,但我认为操作不会真正改变结果的宽高比,因此它不会阻止拉伸/扭曲行为。 (the docs talk about this

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

使用这种视图级缩放矩阵,您可以管理摄像机预览的缩放/裁剪,而无需更改视图的大小。


2
投票

听起来你正在拍摄风景图像并以纵向视图显示它 - 这意味着如果你想避免失真,你将在图像的上方和下方有“柱框”线。

如果您确实想要填充屏幕,并且没有变形或柱框线,那么您将不得不接受图像的一部分将不可见,因为它在观察区域的外部。

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

从中复制的一个图表有助于作为一个例子 - 突出显示这一点的原因是为了说明如何使用坐标。如果你看一下你的裁剪区域,当你从(0,0)开始时它会偏向左上方,我不确定你真正想要的是什么。

enter image description here

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