繁体   English   中英

Android Camera2预览和捕获,宽高比为4:3,但宽度>高度

[英]Android Camera2 preview and capture with 4:3 aspect ratio but width > height

我正在尝试使用Camera2 API实现自定义尺寸的相机视图(预览和捕获)。 特别是4:3的比例,但横向预览(宽度>高度)。

到目前为止,我能够获得正确的TextureView大小,但是预览被垂直压缩,或者正确的预览但TextureView大小超出了所需的容器大小。

尝试使用以下代码设置SCALER_CROP_REGION ,但无效。

val sensorRect = cameraCharacteristics
    .get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE)
    ?: return@run

val sensorWidth = sensorRect.width()

val sensorToViewRatio = sensorWidth / preview.width.toFloat()

val sensorBottom = (preview.height * sensorViewRatio).roundToInt() + sensorRect.top

previewRequestBuilder.set(
    CaptureRequest.SCALER_CROP_REGION,
    Rect(sensorRect.left, sensorRect.top, sensorRect.right, sensorBottom)
)

还尝试了setRectToRectpostScale textureView.setTransform(matrix) ,但是没有运气。 这裁剪了预览表面本身,但实际的预览仍然受到挤压。

实现这种自定义预览和捕获大小的正确和推荐方法是什么?

我正在等待Google的CameraView库的增强版本。

我正在使用的库CameraViewEx代码库可以在这里找到。

以下是与实现预期行为可能相关的类。

SCALER_CROP_REGION不会更改输出的宽高比。 主要开发者文档不让它尽可能明确,但有几个图在这里 ,展示了种植是如何发生的。

图像传感器需要与设备的长边对齐,因此,横向放置的设备将轻松显示横向预览。 那么,您是否在询问具有UI的“纵横比”视图的肖像UI布局?

通常,如果不添加黑色条进行预览(在这种情况下,在左右两侧),或者裁剪和缩放(删除大部分视场; 4的比例约为45%),就无法做到这一点。 3长宽比)。

后者应该可以通过TextureView的转换实现,但是您必须确保从TextureView上已设置的转换开始,或者必须考虑更多涉及传感器,设备和UI相对方向的转换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM