2013-02-20 3 views
5

У меня возникла проблема с блокировкой экспозиции в классе Camera Camera .Parameters. Я могу заблокировать экспозицию перед съемкой, но при вызове camera.takePicture(shutterCallback, rawCallback, jpegCallback) экспозиция снова начинает автонастройку.Сброс AutoExposureLock после вызова takePicture()

Кроме того, getAutoExposureLock() по-прежнему возвращает true, хотя предварительный просмотр и окончательные сохраненные изображения показывают установленную экспозицию.

Андроида документация говорит блокировка экспозиции не будет изменен, делая снимок: http://developer.android.com/reference/android/hardware/Camera.Parameters.html#setAutoExposureLock(boolean)

Что я упускаю?

+0

это происходит на устройствах Samsung –

+0

Видя же на Nexus 5 и Google Glass. – baske

+0

Та же проблема на Nexus 6 и Samsung Galaxy S3.До сих пор не нашли никакого обходного пути. Пожалуйста, поделитесь, если вы нашли. Спасибо – PerracoLabs

ответ

0

У меня такая же проблема. Это потому, что camera.takePicture(shutterCallback, rawCallback, jpegCallback) останавливает предварительный просмотр; вы должны позвонить camera.startPreview(); для продолжения предварительного просмотра.

0

Я пришел к этому самому, я предполагаю его ошибку API, поскольку он работает для меня так же, как и для вас. Разве вам не удалось это исправить? Дай мне знать!

2

мне удалось зафиксировать экспокоррекции на моем Galaxy S4

Camera.Parameters parameters = mCamera.getParameters(); 
parameters.setAutoExposureLock(true); 
mCamera.setParameters(parameters); 
mCamera.startPreview(); 

Тогда в каждом takePicture обратного вызова я в основном сброс блокировки к подлинному

Camera.Parameters parameters = mCamera.getParameters(); 
parameters.setAutoExposureLock(true); 
mCamera.setParameters(parameters); 

Это удается сделать что-то . Все захваченные изображения почти одинаково яркие. Изменение exposureCompensation не влияет, но при изменении ISO время экспозиции автоматически регулируется.

Я буду копать еще кое-что в этом и обновить это сообщение соответственно.

+0

mCamera.setParameters (параметры) сделали трюк за меня спасибо! – dangalg

0

Сброс блокировки в true в takePicture Обратный вызов не очень хорошо работает на моей Samsung Galaxy Note 3. Это делает ситуацию немного лучше, но при этом производит изображения с совершенно другой яркостью. Exif внутри этих jepgs подтверждают, что exposure time варьируется от 1/120 с до 1/400 сек.

Я также заметил, что некоторые jpegs имеют аналогичные exposure time (1/120 с), но разные значения brightness сохранены в exif. Итак, я предполагал, что постпроцессор изображения - это прерыватель игры.

Я сбросил все параметры камеры с помощью native_getParameters, нашел параметры коррекции изображения и установил их все на 5. Этими параметрами являются:

set("min-brightness", 5); 
set("max-brightness", 5); 

set("contrast", 5); 
set("min-contrast", 5); 
set("max-contrast", 5); 

set("max-saturation", 5); 
set("min-saturation", 5); 
set("saturation", 5); 

Теперь выход намного лучше. Изображения почти одинаково яркие. Все 500 тестовых изображений имеют exposure time = 1/120 ± 1 (редко 1/125) и brightness = 5 ± 0,1.

+0

Как вы определили, что значение параметра должно быть 5? – Airman00

0

У меня была такая же проблема на S3. Я заканчивал положить эти строки в начале обратного вызова:

public void onPictureTaken(byte[] data, Camera camera) { 
    //Relock the camera for S3 device 
    camera.startPreview(); 
    UnLockCamera(camera); 
    LockCamera(camera); 
    // your code 

С двумя функциями ниже

public void LockCamera(Camera camera){ 
    //stop auto white balance and auto exposure lock 
    Camera.Parameters params = camera.getParameters(); 
    if (params.isAutoExposureLockSupported()) { 
     params.setAutoExposureLock (true); 
    } 
    if (params.isAutoWhiteBalanceLockSupported()) { 
     params.setAutoWhiteBalanceLock(true); 
    } 
    camera.setParameters(params); 
} 
public void UnLockCamera(Camera camera){ 
    //stop auto white balance and auto exposure lock 
    Camera.Parameters params = camera.getParameters(); 
    if (params.isAutoExposureLockSupported()) { 
     params.setAutoExposureLock (false); 
    } 
    if (params.isAutoWhiteBalanceLockSupported()) { 
     params.setAutoWhiteBalanceLock(false); 
    } 
    camera.setParameters(params); 
} 
Смежные вопросы