2013-02-20 20 views
5

Ho riscontrato un problema con il blocco dell'esposizione nella classe Camera.Parameters di Android. Sono in grado di bloccare l'esposizione prima di scattare una foto, ma al momento della chiamata allo camera.takePicture(shutterCallback, rawCallback, jpegCallback) l'esposizione riprende automaticamente la regolazione automatica.Ripristino Esposizione automatica dopo aver chiamato takePicture()

Inoltre, getAutoExposureLock() restituisce ancora true anche se l'anteprima e le immagini salvate finali mostrano un'esposizione corretta.

La documentazione Android dice il blocco dell'esposizione non sarà modificato scattando una foto: http://developer.android.com/reference/android/hardware/Camera.Parameters.html#setAutoExposureLock(boolean)

Che cosa mi manca?

+0

questo sta accadendo su dispositivi Samsung –

+0

Vedendo lo stesso su Nexus 5 e Google Glass. – baske

+0

Stesso problema con Nexus 6 e Samsung Galaxy S3.Finora non ho trovato alcuna soluzione. Per favore condividi se ne hai trovato. Grazie – PerracoLabs

risposta

0

Ho lo stesso problema. Questo perché camera.takePicture(shutterCallback, rawCallback, jpegCallback) interrompe l'anteprima; devi chiamare camera.startPreview(); per continuare l'anteprima.

0

Mi sono imbattuto in questo me stesso, sto assumendo che è un errore API in quanto funziona lo stesso per me come per voi. A meno che non sia riuscito a risolverlo nel frattempo? Fammi sapere!

2

sono riuscito a bloccare la compensazione dell'esposizione sul mio Galaxy S4

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

Poi in ogni takePicture richiamata ho praticamente azzerare la serratura a true

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

Questo riesce a fare qualcosa . Tutte le immagini catturate sono quasi ugualmente luminose. Il cambio exposureCompensation non ha alcun effetto, ma quando si cambia ISO il tempo di esposizione viene regolato automaticamente.

Ne scriverò ancora un po 'e aggiorno questo post di conseguenza.

+0

mCamera.setParameters (parametri) ha fatto il trucco per me grazie! – dangalg

0

Il ripristino del blocco su true nella chiamata takePicture non funziona correttamente sul mio Samsung Galaxy Note 3. Rende la situazione un po 'migliore, ma produce comunque immagini con luminosità molto diversa. Exif all'interno di quei jepgs conferma che exposure time varia da 1/120 sec a 1/400 sec.

Ho anche notato che alcuni file JPEG hanno lo stesso exposure time (1/120 sec) ma diverso valore brightness salvato in exif. Quindi, la mia era l'ipotesi che il post-processore di immagini sia l'interruttore del gioco.

Ho scaricato tutti i parametri della telecamera tramite native_getParameters, ho trovato i parametri di correzione dell'immagine e li ho impostati su 5. Questi parametri sono:

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

Ora l'output è molto meglio. Immagini quasi ugualmente luminose. Tutte le 500 immagini di prova hanno exposure time = 1/120 ± 1 (raramente 1/125) e brightness = 5 ± 0,1.

+0

Come hai stabilito che il valore del parametro dovrebbe essere 5? – Airman00

0

Ho avuto lo stesso problema su S3. Ho finito di mettere coloro linea all'inizio del callback:

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

Con le due funzioni di seguito

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