Android Camera.Parameters类中的曝光锁定有问题。我可以在拍照前锁定曝光,但在拨打camera.takePicture(shutterCallback, rawCallback, jpegCallback)
时,曝光会再次开始自动调整。
此外,getAutoExposureLock()
仍然会返回true
,即使预览和最终保存的图像显示已调整曝光。
Android文档说明不会通过拍照来更改曝光锁定:http://developer.android.com/reference/android/hardware/Camera.Parameters.html#setAutoExposureLock(boolean)
我错过了什么?
答案 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);
}