Android 5.0 预览表面和捕获的静止图像上的错误裁剪区域

标签 android android-camera zooming android-5.0-lollipop

我正在尝试在带有 camera2 接口(interface)的 Android 5.0 上获得数字缩放帧。 该功能的适当文档是 developer.android.com/camera2/captureRequest

我的应用中使用的表面:

  • SurfaceView(1920x1080,宽高比为 16:9)
  • ImageReader(3264x2448,4:3 纵横比)

相机的传感器尺寸为 3280x2464(4:3 纵横比)

我想从传感器获取的裁剪区域是:

Rect zoomCropPreview = new Rect(1094, 822, 2186, 1642); //(1092x820, 4:3 aspect ratio)

我将此 Rect 设置为预览请求的参数:

previewRequestBuilder.set(CaptureRequest.SCALER_CROP_REGION, zoomCropPreview);
captureSession.setRepeatingRequest(previewRequestBuilder.build(), null, null);

并拍摄静止图像:

stillRequestBuilder.set(CaptureRequest.SCALER_CROP_REGION, zoomCropPreview);

captureSession.capture(stillRequestBuilder.build(), new captureListener() , null);

预期结果:

  • 因为裁剪矩形是 4:3 的比例,所以预览应该垂直裁剪(信箱)
  • 静态图像应该是精确的裁剪区域。
  • 预览图和静止图像都应以同一场景点为中心,并且仅垂直边缘不同。

实际结果:

  • 不同场景的预览和静止图像点似乎在垂直移动。看附件图片。 Preview surface

Captured still image

我做错了什么?

最佳答案

已修复! 一般的想法是分别计算预览和静止图像的裁剪区域。

1) 像初始帖子一样计算静止图像的裁剪区域(使用 4:3 矩形)

2) 对于裁剪区域上方的预览 (4:3) 并缩小垂直尺寸以获得 16:9 的矩形。

关于Android 5.0 预览表面和捕获的静止图像上的错误裁剪区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26583489/

相关文章:

android - 如何在 camera api android 中调整触摸对焦区域

javascript - jQuery:触发淡入函数调用

javascript - 亚像素滚动问题,无法在 Chrome 69 上正确设置 scrollTop

css - 阻止 "Hover Zoom"插件显示缩放的 img(或向 img div 添加类)

java - 安卓/ Gradle : specify a dependency for a subset of build types

java - editText.getText().toString() 检索字符串全部大写

Android - 由于 errno=13,读取文件列表失败

android - 使用标准 Android 应用程序拍照并存储在数据库中

java - @+id/允许使用哪些特殊字符?

android - 用于在android中打开/关闭相机手电筒的小部件