调用takePicture()后AutoExposureLock重置

时间:2013-02-20 22:34:56

标签: android camera

Android Camera.Parameters类中的曝光锁定有问题。我可以在拍照前锁定曝光,但在拨打camera.takePicture(shutterCallback, rawCallback, jpegCallback)时,曝光会再次开始自动调整。

此外,getAutoExposureLock()仍然会返回true,即使预览和最终保存的图像显示已调整曝光。

Android文档说明不会通过拍照来更改曝光锁定:http://developer.android.com/reference/android/hardware/Camera.Parameters.html#setAutoExposureLock(boolean)

我错过了什么?

5 个答案:

答案 0 :(得分:2)

我成功锁定了Galaxy S4上的曝光补偿

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

然后在每个takePicture回调中,我基本上将锁重置为true

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

这设法做某事。捕获的所有图像几乎同样明亮。更改exposureCompensation无效,但在更改ISO时,会自动调整曝光时间。

我会再深入研究一下并相应地更新这篇文章。

答案 1 :(得分:0)

我有同样的问题。那是因为camera.takePicture(shutterCallback, rawCallback, jpegCallback)停止预览;您必须致电camera.startPreview();继续预览。

答案 2 :(得分:0)

我自己也遇到过这种情况,我认为这是一个API错误,因为它对我来说和你一样。除非你在此期间设法修复它?让我知道!

答案 3 :(得分:0)

takePicture回调中将锁重置为true在我的三星Galaxy Note 3上效果不佳。它使情况变得更好,但仍会产生亮度差异很大的图像。在那些jepgs中的Exif确认exposure time从1/120秒变化到1/400秒。

我还注意到一些jpeg在exif中保存了类似的exposure time(1/120秒)但不同的brightness值。所以,我猜测图像后处理器是游戏破坏者。

我通过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。

答案 4 :(得分: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);
}