使用Android Camera2时,我想在计算曝光时使用区域忽略图像的前25%。我用这个:
// Compute the metering rectangle to ignore the top 25% of the picture:
Rect newRect = new Rect(mActiveArraySize.left, (int) (mActiveArraySize.height() * 0.25), mActiveArraySize.right, mActiveArraySize.bottom);
MeteringRectangle meteringRectangle = new MeteringRectangle(newRect, 1);
MeteringRectangle[] meteringRectangleArr = { meteringRectangle };
// Set the metering rectangle:
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_REGIONS, meteringRectangleArr);
// Set the request:
try { mCaptureSession.setRepeatingRequest(mPreviewRequestBuilder.build(), null, mBackgroundHandler); }
catch (CameraAccessException e) { e.printStackTrace(); }
它正在使用我的Nexus 5X。但是在三星Galaxy Note 5上(而且,我想,在所有三星设备上),它不起作用,我的区域被忽略了。
我看到了这个问题:Android Camera2 API - Set AE-regions not working,操作说他通过使用Samsung SDK设法让它工作。我真的更愿意避免这种情况。
有人设法让AE区域与三星设备配合使用吗?
答案 0 :(得分:0)
最近我遇到了同样的问题,终于找到了一个帮助我的解决方案。
我需要做的就是从活动传感器矩形的边缘开始步长1像素。在您的示例中,而不是此矩形:
Rect newRect = new Rect(mActiveArraySize.left,
(int) (mActiveArraySize.height() * 0.25),
mActiveArraySize.right,
mActiveArraySize.bottom);
我会用这个:
Rect newRect = new Rect(mActiveArraySize.left + 1,
(int)(mActiveArraySize.height() * 0.25),
mActiveArraySize.right + 1,
mActiveArraySize.bottom - 2);
我从底部减去2
,因为有源数组的最底部像素为mActiveArraySize.height() - 1
,我需要再减去一个像素。
似乎很多供应商都没有很好地实现documentation
的这一部分如果计量区域位于捕获结果元数据中返回的已使用android.scaler.cropRegion之外,则摄像机设备将忽略裁剪区域外的部分,并仅将结果矩形输出为结果元数据中的计量区域。如果该区域完全位于裁剪区域之外,则该区域将被忽略,并且不会在结果元数据中报告。