5

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

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

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

我错过了什么?

4

5 回答 5

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 时会自动调整曝光时间。

我将对此进行深入研究并相应地更新这篇文章。

于 2014-03-13T11:46:12.333 回答
0

在我的三星 Galaxy Note 3 上,在回调中将锁定重置为 truetakePicture效果不佳。它使情况好一些,但仍会产生亮度完全不同的图像。这些 jepg 中的 Exif 确认exposure time从 1/120 秒到 1/400 秒不等。

我还注意到一些 jpeg 具有相似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。

于 2014-06-09T16:32:22.413 回答
0

我自己也遇到过这个问题,我假设它是一个 API 错误,因为它对我和你一样有效。除非您在此期间设法修复它?让我知道!

于 2013-06-04T13:48:57.680 回答
0

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

于 2013-05-24T08:06:13.720 回答
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);
}
于 2015-11-07T12:16:02.633 回答