2013-02-20 13 views
5

Mam problem z blokadą ekspozycji w klasie Android Camera.Parameters. Jestem w stanie zablokować ekspozycję przed zrobieniem zdjęcia, ale po wywołaniu camera.takePicture(shutterCallback, rawCallback, jpegCallback) ekspozycja zaczyna automatycznie się regulować.AutoExposureLock resetowanie po wywołaniu takePicture()

Ponadto getAutoExposureLock() nadal zwraca true, mimo że podgląd i końcowe zapisane obrazy pokazują skorygowaną ekspozycję.

Dokumentacja Android mówi blokada ekspozycji nie zostanie zmieniona przez zrobieniem zdjęcia: http://developer.android.com/reference/android/hardware/Camera.Parameters.html#setAutoExposureLock(boolean)

Czego mi brakuje?

+0

to się dzieje na urządzeniach Samsung –

+0

Widząc takie same na Nexusie 5 i Google Glass. – baske

+0

Ten sam problem na Nexusie 6 i Samsung Galaxy S3.Do tej pory nie znaleziono żadnego obejścia. Udostępnij, jeśli znalazłeś. Dzięki – PerracoLabs

Odpowiedz

0

Mam ten sam problem. To dlatego, że camera.takePicture(shutterCallback, rawCallback, jpegCallback) zatrzymuje podgląd; musisz zadzwonić pod numer camera.startPreview();, aby kontynuować przeglądanie.

0

Sam do tego doszedłem, zakładam, że jest to błąd interfejsu API, ponieważ działa on tak samo dla mnie jak dla ciebie. O ile nie udało Ci się go naprawić w międzyczasie? Daj mi znać!

2

udało mi się zablokować kompensację ekspozycji na moim Galaxy S4

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

Następnie w każdej takePicture zwrotnego I w zasadzie zresetować blokadę do prawdziwej

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

To udaje się coś zrobić . Wszystkie przechwycone obrazy są prawie równie jasne. Zmiana exposureCompensation nie ma żadnego efektu, ale podczas zmiany czułości ISO czas ekspozycji jest regulowany automatycznie.

Przekopię się jeszcze bardziej i zaktualizuję odpowiednio ten post.

+0

mCamera.setParameters (parametry) zrobili dla mnie dzięki! – dangalg

0

Resetowanie blokady na true w takePicture oddzwanianie nie działa dobrze na mojej Samsung Galaxy Note 3. To sprawia, że ​​sytuacja jest trochę lepsza, ale nadal produkuje obrazy o zupełnie innej jasności. Exif wewnątrz tych ypgs potwierdzają, że exposure time zmienia się od 1/120 s do 1/400 s.

Zauważyłem również, że niektóre jpeg mają podobną wartość exposure time (1/120 s), ale inną wartość brightness zapisaną w exif. Tak więc, zgaduję, że postprocesor obrazu jest łamaczem gier.

Zrzuciłem wszystkie parametry kamery przez native_getParameters, znalazłem parametry korekty obrazu i ustaw je wszystkie na 5. Parametry te to:

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

Teraz wyniki są znacznie lepsze. Obrazy prawie równie jasne. Wszystkie z 500 zdjęć testowych mają exposure time = 1/120 ± 1 (rzadko 1/125) i brightness = 5 ± 0,1.

+0

W jaki sposób ustaliłeś, że wartość parametru powinna wynosić 5? – Airman00

0

Miałem ten sam problem na S3. Skończyło umieszczenie tych linii na początku wywołania zwrotnego:

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

z dwóch funkcji poniżej

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); 
} 
Powiązane problemy