2013-02-20 12 views
5

Ich habe ein Problem mit der Belichtungssperre in der Android Camera.Parameters Klasse. Ich kann die Belichtung vor der Aufnahme sperren, aber nach dem Aufruf von camera.takePicture(shutterCallback, rawCallback, jpegCallback) beginnt die Belichtung wieder automatisch zu justieren.AutoExposureLock zurückgesetzt nach dem Aufruf von takePicture()

Auch getAutoExposureLock() gibt immer noch true zurück, obwohl die Vorschau und die endgültigen gespeicherten Bilder angepasste Belichtung zeigen.

Die Android-Dokumentation sagt der Belichtungsspeicherung wird nicht durch die Aufnahme eines Bildes geändert werden: http://developer.android.com/reference/android/hardware/Camera.Parameters.html#setAutoExposureLock(boolean)

Was fehlt ich bin?

+0

dies auf Samsung-Geräten geschieht –

+0

Sehen Sie das gleiche auf Nexus 5 und Google Glass. – baske

+0

Das gleiche Problem auf Nexus 6 und Samsung Galaxy S3.Bisher habe ich keine Problemumgehung gefunden. Bitte teilen Sie, wenn Sie irgendwelche gefunden haben. Danke – PerracoLabs

Antwort

0

Ich habe das gleiche Problem. Das liegt daran, dass camera.takePicture(shutterCallback, rawCallback, jpegCallback) die Vorschau stoppt. Sie müssen camera.startPreview(); aufrufen, um die Vorschau fortzusetzen.

0

Ich bin über das selbst gekommen, ich nehme an, es ist ein API-Fehler, da es für mich genauso funktioniert wie für Sie. Es sei denn, Sie haben es in der Zwischenzeit behoben? Gib mir Bescheid!

2

ich es geschafft, die Belichtungskorrektur auf meinem Galaxy S4

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

Dann in jedem takePicture Rückruf zu sperren I zurückgesetzt grundsätzlich die Sperre auf true

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

Dieses etwas tun verwaltet. Alle aufgenommenen Bilder sind fast gleich hell. Das Ändern von exposureCompensation hat keine Auswirkung, aber wenn Sie ISO ändern, wird die Belichtungszeit automatisch angepasst.

Ich werde etwas mehr in das graben und diesen Beitrag entsprechend aktualisieren.

+0

mCamera.setParameters (Parameter) hat den Trick für mich dank gemacht! – dangalg

0

Das Zurücksetzen der Sperre auf True in takePicture Rückruf funktioniert nicht gut auf meinem Samsung Galaxy Note 3. Es macht die Situation ein wenig besser, produziert aber immer noch Bilder mit ganz anderer Helligkeit. Exif innerhalb dieser Jepgs bestätigen, dass exposure time von 1/120 Sek. Zu 1/400 Sek. Variiert.

Ich habe auch festgestellt, dass einige JPEGs haben ähnliche exposure time (1/120 sec), aber andere brightness Wert in Exif gespeichert. Also, ich vermute, dass der Bild-Postprozessor der Spielbrecher ist.

Ich habe alle Kamera-Parameter über native_getParameters, gefunden Bildkorrekturparameter und stellen Sie alle auf 5. Diese Parameter sind:

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

Jetzt ist die Ausgabe viel besser. Bilder fast gleich hell. Alle 500 Testbilder haben exposure time = 1/120 ± 1 (selten 1/125) und brightness = 5 ± 0,1.

+0

Wie haben Sie festgestellt, dass der Parameterwert 5 sein sollte? – Airman00

0

Ich hatte das gleiche Problem auf S3. I ended jene Linie am Anfang des Callback setzen:

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

Mit den beiden folgenden Funktionen

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); 
} 
Verwandte Themen