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

时间:2014-10-27 08:24:34

标签: android android-camera zoom android-5.0-lollipop

我试图通过camera2接口在Android 5.0上获得数字缩放帧。 该功能的适当文档是developer.android.com/camera2/captureRequest

我的应用中使用的表面:

  • SurafaceView(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);

预期结果:

  • Coz裁剪矩形比例为4:3,然后应预览垂直(信箱)
  • 静止图像应该是确切的裁剪区域。
  • 预览图像和静止图像都应位于相同的场景点上,并且只应在垂直边缘上有所不同。

真实结果:

  • 预览和静止图像点在不同的场景上,似乎是垂直移动。查看附加图像。 Preview surface

Captured still image

我做错了什么?

1 个答案:

答案 0 :(得分:2)

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

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

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