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)
)
也尝试了 textureView.setTransform(matrix)
与 setRectToRect
和 postScale
但没有成功。裁剪了预览表面本身,但实际预览仍然被挤压。
实现这种自定义预览和捕获大小的正确和推荐方法是什么?
我正在研究 google's CameraView library 的增强版。
图书馆CameraViewEx codebase that I am working on can be found here.
以下是可能与实现预期行为相关的类。
SCALER_CROP_REGION不会改变输出的纵横比。主要的开发人员文档没有尽可能清楚地说明,但是有一些图表 here 显示了裁剪是如何发生的。
图像传感器需要与设备的长边对齐,因此横向放置的设备可以轻松显示横向预览。所以你问的是纵向 UI 布局,横向纵横比视图显示相机预览?
一般来说,如果不添加黑条进行预览(在本例中为左侧和右侧),或者裁剪和缩放(移除大部分视野;大约4:3 宽高比为 45%)。
后者应该可以通过 TextureView 的变换来实现,但是您必须确保从已经在 TextureView 上设置的变换开始,或者您必须考虑更多涉及传感器、设备的相对方向的变换,和 UI.
我正在尝试使用 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)
)
也尝试了 textureView.setTransform(matrix)
与 setRectToRect
和 postScale
但没有成功。裁剪了预览表面本身,但实际预览仍然被挤压。
实现这种自定义预览和捕获大小的正确和推荐方法是什么?
我正在研究 google's CameraView library 的增强版。
图书馆CameraViewEx codebase that I am working on can be found here.
以下是可能与实现预期行为相关的类。
SCALER_CROP_REGION不会改变输出的纵横比。主要的开发人员文档没有尽可能清楚地说明,但是有一些图表 here 显示了裁剪是如何发生的。
图像传感器需要与设备的长边对齐,因此横向放置的设备可以轻松显示横向预览。所以你问的是纵向 UI 布局,横向纵横比视图显示相机预览?
一般来说,如果不添加黑条进行预览(在本例中为左侧和右侧),或者裁剪和缩放(移除大部分视野;大约4:3 宽高比为 45%)。
后者应该可以通过 TextureView 的变换来实现,但是您必须确保从已经在 TextureView 上设置的变换开始,或者您必须考虑更多涉及传感器、设备的相对方向的变换,和 UI.