android - 如何在Android上的Camera2 API中设置 '' CONTROL_AE_EXPOSURE_COMPENSATION''?

标签 android android-camera android-camera2 autoexposurecompensation

我目前正在开发 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 示例。

关于android - 如何在Android上的Camera2 API中设置 '' CONTROL_AE_EXPOSURE_COMPENSATION''?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42852933/

相关文章:

android - 如何使用 google vision api 设置相机预览方向

android - 如何检查是否启用了设备摄像头?

android - Camera2 - 获取静态捕获位图的最有效方式

java - Android - 创建线程时为假

android - Horizo​​ntalScrollView 与 ListView——文档错误?

java - 是否可以制作 Firebase 实时数据库结构的一部分,仅限本地

java - 如何将CameraX与PreviewView一起使用?

android - 在不使用 MediaRecorder 的情况下使用 Camera2 API 进行录制

video - Android : mp4 output file not fully playable 上没有预览的 Camera2 视频录制

java - java android 中的转换(ArrayList)