如何在 Android 上设置 Camera2 API 中的 ''CONTROL_AE_EXPOSURE_COMPENSATION''?
How to set the ''CONTROL_AE_EXPOSURE_COMPENSATION'' in Camera2 API on Android?
我目前正在开发 Androids Camera 2 API,我目前的问题是,我无法设置 "CONTROL_AE_EXPOSURE_COMPENSATION"。
我的代码:
-1.0 < exposureAdjustment <1.0
public void setExposure(double exposureAdjustment) {
Range<Integer> range1 = mCameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_COMPENSATION_RANGE);
int minExposure = range1.getLower();
int maxExposure = range1.getUpper();
float newCalculatedValue = 0;
if (exposureAdjustment >= 0) {
newCalculatedValue = (float) (minExposure * exposureAdjustment);
} else {
newCalculatedValue = (float) (maxExposure * -1 * exposureAdjustment);
}
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, (int) newCalculatedValue);
}
很遗憾,它不起作用。
我找到了适合我的解决方案。其中 exposureAdjustment
参数介于 -1 到 +1 之间。
public void setExposure(double exposureAdjustment) {
Range<Integer> range1 = mCameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_COMPENSATION_RANGE);
int minExposure = range1.getLower();
int maxExposure = range1.getUpper();
if (minExposure != 0 || maxExposure != 0) {
float newCalculatedValue = 0;
if (exposureAdjustment >= 0) {
newCalculatedValue = (float) (minExposure * exposureAdjustment);
} else {
newCalculatedValue = (float) (maxExposure * -1 * exposureAdjustment);
}
if (mPreviewRequestBuilder != null) {
try {
CaptureRequest captureRequest = mPreviewRequestBuilder.build();
mCaptureSession.setRepeatingRequest(captureRequest, camera2FocusMeteringManager.mCaptureCallbackListener, mBackgroundHandler);
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, (int) newCalculatedValue);
mCaptureSession.capture(captureRequest, camera2FocusMeteringManager.mCaptureCallbackListener, mBackgroundHandler);
} catch (CameraAccessException e) {
}
}
}
}
我通过 mPreviewRequestBuilder
(捕获请求的生成器)为每次曝光调整构建一个新的 CaptureRequest
。
Here 您可以找到完整的 Camera2 示例。
我目前正在开发 Androids Camera 2 API,我目前的问题是,我无法设置 "CONTROL_AE_EXPOSURE_COMPENSATION"。
我的代码:
-1.0 < exposureAdjustment <1.0
public void setExposure(double exposureAdjustment) {
Range<Integer> range1 = mCameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_COMPENSATION_RANGE);
int minExposure = range1.getLower();
int maxExposure = range1.getUpper();
float newCalculatedValue = 0;
if (exposureAdjustment >= 0) {
newCalculatedValue = (float) (minExposure * exposureAdjustment);
} else {
newCalculatedValue = (float) (maxExposure * -1 * exposureAdjustment);
}
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, (int) newCalculatedValue);
}
很遗憾,它不起作用。
我找到了适合我的解决方案。其中 exposureAdjustment
参数介于 -1 到 +1 之间。
public void setExposure(double exposureAdjustment) {
Range<Integer> range1 = mCameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_COMPENSATION_RANGE);
int minExposure = range1.getLower();
int maxExposure = range1.getUpper();
if (minExposure != 0 || maxExposure != 0) {
float newCalculatedValue = 0;
if (exposureAdjustment >= 0) {
newCalculatedValue = (float) (minExposure * exposureAdjustment);
} else {
newCalculatedValue = (float) (maxExposure * -1 * exposureAdjustment);
}
if (mPreviewRequestBuilder != null) {
try {
CaptureRequest captureRequest = mPreviewRequestBuilder.build();
mCaptureSession.setRepeatingRequest(captureRequest, camera2FocusMeteringManager.mCaptureCallbackListener, mBackgroundHandler);
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, (int) newCalculatedValue);
mCaptureSession.capture(captureRequest, camera2FocusMeteringManager.mCaptureCallbackListener, mBackgroundHandler);
} catch (CameraAccessException e) {
}
}
}
}
我通过 mPreviewRequestBuilder
(捕获请求的生成器)为每次曝光调整构建一个新的 CaptureRequest
。
Here 您可以找到完整的 Camera2 示例。