我想使用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
吗?如果没有,我该如何使用呢?
提前致谢
答案 0 :(得分:3)
我一直在遇到同样的问题,因为我想将相机预览流实现为 square TextureView。
使用SCALER_CROP_REGION
似乎是解决纵横比不兼容的问题的显而易见的地方,但是我认为该操作实际上不会改变结果的纵横比,因此不会阻止拉伸/扭曲行为。 (the docs talk about this)
通过实现与Camera2Basic示例项目中的转换类似的转换,我已经取得了进步-参见Camera2BasicFragment中的函数configureTransform
)。
使用这种视图级别的缩放矩阵,您可以在不更改视图大小的情况下管理摄像机预览的缩放/裁剪。
答案 1 :(得分:2)
听起来你正在拍摄风景图像并以纵向视图显示 - 这意味着如果你想避免失真,你将在图像的上方和下方有“柱框”线。
如果您确实想要填充屏幕,并且没有扭曲或柱框线,那么您将不得不接受图像的一部分将不可见,因为它在观察区域的外部。
没有图表,SCALER_CROP_REGION很难理解 - 我在这里找到了Andoir源文档中的最佳解释:https://source.android.com/devices/camera/camera3_crop_reprocess
从中复制的一个图表有助于作为一个例子 - 突出显示这一点的原因是为了说明如何使用坐标。如果你看一下你的裁剪区域,当你从(0,0)开始时它将偏向左上方,我不确定你真正想要的是什么。