Android Camera2 увеличивает яркость

Я использую android camera2 в своем приложении, чтобы делать непрерывные изображения. Здесь, когда я пользуюсь камерой, получающ изображение предварительного просмотра яркости очень темный по сравнению с оригинальной камерой. Я видел этот, но в этом ответе нет подобного требования.

Я попытался установить яркость в camera2, как предложено здесь:

Обратите внимание, что этот элемент управления будет эффективен только в том случае, если android.control.aeMode!= OFF. Этот элемент управления вступает в силу даже тогда, когда android.control.aeLock == true.

captureRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
            captureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);
            captureRequestBuilder.set(CaptureRequest.CONTROL_AE_LOCK, true);
            captureRequestBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, 6);

Но он все еще показывает предварительный просмотр как темное изображение, как показано ниже.

См. разницу здесь:

Оригинальная камера: введите описание изображения здесь

Использование Camera2: введите описание изображения здесь

И какое значение мне нужно передать в качестве второго параметра в:

captureRequestBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, 6);

Я сохранил 6, потому что, как было предложено в документах:

Например, если шаг экспозиции (EV) равен 0,333, "6" будет означать компенсацию экспозиции +2 EV; -3 будет означать компенсацию экспозиции -1 EV.

Но все равно никакого эффекта в яркости.

Ответ 1

CONTROL_AE_LOCK должен быть выключен. Вы неправильно истолковали документ, возможно, сам документ немного запутан.

Обратите внимание, что этот элемент управления будет эффективен только в том случае, если android.control.aeMode!= OFF. Этот контроль вступает в силу, даже если android.control.aeLock == true.

Это означает, что когда блокировка экспозиции включена, компенсация экспозиции будет применена к заблокированной экспозиции, а не к мгновенной экспозиции во время съемки.

Даже в вашем запросе повторения экспозиция заблокирована, поэтому она не помогает.

Удалите блокировку AE, и она должна работать.

Ответ 2

Вы можете попробовать это

public void setBrightness(int value) {
    int brightness = (int) (minCompensationRange + (maxCompensationRange - minCompensationRange) * (value / 100f));
    previewRequestBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, brightness);
    applySettings();
 }

private void applySettings() {
    captureSession.setRepeatingRequest(previewRequestBuilder.build(), null, null);
}

Ответ 3

Во-первых, не блокируйте автоматическое экспонирование - это не требуется при настройке компенсации экспозиции.

Во-вторых, вы вызвали CameraCaptureSession.setRepeatingRequest с новым запросом на захват?

Ответ 4

При установке CONTROL_AE_EXPOSURE_COMPENSATION второй параметр, определенный документами, относится к CameraCharacteristics.CONTROL_AE_COMPENSATION_STEP

Корректировка измеряется как количество шагов, размер шага определяется параметром android.control.aeCompensationStep и разрешенным диапазоном by android.control.aeCompensationRange. "

Значение 6 в примере для + 2EV корректно, только если шаг равен 0.333, что является просто примером.

Следующий код даст вам значение компенсации экспозиции, которое будет использоваться для + 2EV

CameraManager manager = (CameraManager)this.getSystemService(Context.CAMERA_SERVICE);
CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId);
double exposureCompensationSteps = characteristics.get(CameraCharacteristics.CONTROL_AE_COMPENSATION_STEP).doubleValue();
int exposureCompensation = (int)( 2.0 / exposureCompensationSteps );

Я также предлагаю вам проверить, находится ли значение в пределах диапазона, указанного CameraCharacteristics.CONTROL_AE_COMPENSATION_RANGE