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

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

Я попытался установить яркость в 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.

Но все равно не влияет на яркость ..

 Shylendra Madda07 мая 2018 г., 14:32
@SumitMarwha Нет, а ты? ;)
 Sumit Marwha08 мая 2018 г., 10:04
не до сих пор. Устаревший телефон Camera2 не улучшает яркость автоматически
 Ronak Thakkar26 сент. 2018 г., 14:41
привет, вы нашли решение?
 Shylendra Madda26 сент. 2018 г., 15:15
@RonakThakkar Нет еще :(
 Sumit Marwha11 дек. 2017 г., 06:44
Вы нашли какое-нибудь решение проблемы?

Ответы на вопрос(5)

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

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);
}
 Jayesh30 нояб. 2017 г., 14:30
вы можете установить его static int minCompensationRange = 0; int maxCompensationRange = 2;
 Shylendra Madda30 нояб. 2017 г., 14:12
Где я могу получитьminCompensationRange а такжеmaxCompensationRange?
 Shylendra Madda07 мая 2018 г., 15:39
@Jayesh, что может быть значение int, которое мне нужно передать, я имею в виду, что значение яркости в диапазоне?
 dastan30 янв. 2018 г., 04:41
Будет ли это работать на ограниченной поддержке Camera2 API?
 Ihdina28 сент. 2018 г., 03:36
не работает на камеру2

Вот:

Добавьте ниже код в onConfigured() а такжеunlockFocus()

captureRequestBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE,getRange());

Используя приведенный выше код, вы получите лучший предварительный просмотр. Но ваша захваченная картинка останется такой, как есть.Чтобы получить лучшую картинку, используйте тот же код в captureStillPicture()

captureBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, getRange());

getRange это:

    private Range<Integer> getRange() {
    CameraCharacteristics chars = null;
    try {
        chars = mCameraManager.getCameraCharacteristics(mCameraId);
        Range<Integer>[] ranges = chars.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES);
        Range<Integer> result = null;
        for (Range<Integer> range : ranges) {
            int upper = range.getUpper();
            // 10 - min range upper for my needs
            if (upper >= 10) {
                if (result == null || upper < result.getUpper().intValue()) {
                    result = range;
                }
            }
        }
        if (result == null) {
            result = ranges[0];
        }
        return result;
    } catch (CameraAccessException e) {
        e.printStackTrace();
        return null;
    }
}
 Ihdina28 сент. 2018 г., 03:36
это работает, спасибо.
 Elias Nawfal12 окт. 2018 г., 12:19
Спасибо, это работает

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

Корректировка измеряется количеством шагов, размер шага определяется android.control.aeCompensationStep, а допустимый диапазон - 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

возможно, сам документ немного сбивает с толку.

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

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

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

Снимите блокировку АЕ, и она должна работать.

 Shylendra Madda24 нояб. 2017 г., 08:39
You should also try to take images with uniform grey background to compare Как я могу использовать это?
 yumoji24 нояб. 2017 г., 07:42
Вы можете обмениваться фотографиями с камеры с включенным EXIF ​​- мы используем камеру2 без проблем. Вам также следует попробовать сделать снимки с равномерным серым фоном для сравнения.
 Shylendra Madda24 нояб. 2017 г., 06:10
Я устал положить это как ложноеcaptureRequestBuilder.set(CaptureRequest.CONTROL_AE_LOCK, false); и попытался, удалив его, но тот же результат, нет улучшения яркости ..
 Shylendra Madda23 нояб. 2017 г., 11:11
Хорошо, я проверю это и дам вам знать
 Shylendra Madda23 нояб. 2017 г., 14:31
Пробовал, но не работает .. :(

не блокируйте автоэкспозицию - это не нужно при настройке компенсации экспозиции.

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

 Shylendra Madda10 нояб. 2017 г., 06:55
Во-первых, как я уже отмечал, как примечание в моем вопросе, мне нужно заблокировать его, потому что в официальном документе сказано, что ..Обратите внимание, что этот элемент управления будет действовать только в том случае, если android.control.aeMode! = OFF. Этот элемент управления вступит в силу, даже если android.control.aeLock == true Во-вторых, я звонюcameraCaptureSessions.setRepeatingRequest(captureRequestBuilder.build(), null, mBackgroundHandler); вupdatePreview().
 Eddy Talvala07 мар. 2018 г., 21:48
«даже когда» означает, что элемент управления работает независимо от того, является ли aeLock истинным или ложным (хотя, если это правда, нормальная автоэкспозиция не работает, что, вероятно, не то, что вам нужно). Пожалуйста, проверьте выбранную вами целевую частоту кадров. Компенсация экспозиции не может заставить камеру работать медленнее, чем минимальная целевая частота кадров.

Ваш ответ на вопрос