【问题标题】:How to set the ''CONTROL_AE_EXPOSURE_COMPENSATION'' in Camera2 API on Android?如何在 Android 上的 Camera2 API 中设置“CONTROL_AE_EXPOSURE_COMPENSATION”?
【发布时间】:2017-03-17 08:48:49
【问题描述】:

我目前正在开发 Androids Camera 2 API,我目前的问题是,我无法设置“CONTROL_AE_EXPOSURE_COMPENSATION”。

我的代码:

-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);
}

不幸的是,它不起作用。

【问题讨论】:

    标签: android android-camera android-camera2 autoexposurecompensation


    【解决方案1】:

    我找到了一个适合我的解决方案。其中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 示例。

    【讨论】:

    • 您的 newCalculatedValue 每次都会变为 -367。它不在 -1 到 1 之间
    • @PiyushGupta 是可能的。 newCaluclatedValue 不在-1 到1 之间。方法输入参数在-1 到1 之间。我已经稍微更新了答案。此外,您还可以找到完整 camera2 示例的链接。希望对您有所帮助。
    • 如果你的代码工作正常,那么你能分享那部分代码或它的java类文件吗? @Manuel Schmitzberger。我会感谢你的
    • 设置最大曝光,需要设备支持,需要调用:setExposure(-1)setExposure(1)
    • 好吧,你的意思是对于搜索栏,如果我需要 -1 到 1 之间的值,我可以将最大进度设置为 1
    猜你喜欢
    • 2022-11-17
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多