【问题标题】:AutoExposureLock resetting after calling takePicture()调用 takePicture() 后 AutoExposureLock 重置
【发布时间】:2015-11-07 20:28:13
【问题描述】:

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

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

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

我错过了什么?

【问题讨论】:

  • 这发生在三星设备上
  • 在 Nexus 5 和 Google Glass 上看到了同样的结果。
  • 在 Nexus 6 和三星 Galaxy S3 上存在同样的问题。到目前为止还没有找到任何解决方法。如果你发现了请分享。谢谢

标签: android camera


【解决方案1】:

我设法在我的 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 时会自动调整曝光时间。

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

【讨论】:

  • mCamera.setParameters(parameters) 为我解决了问题,谢谢!
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    我自己也遇到过这个问题,我假设它是一个 API 错误,因为它对我和你的工作方式相同。除非您在此期间设法修复它?告诉我!

    【讨论】:

      【解决方案4】:

      takePicture 回调中将锁定重置为 true 在我的三星 Galaxy Note 3 上效果不佳。它使情况稍微好一些,但仍会产生亮度完全不同的图像。这些 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。

      【讨论】:

      • 你是怎么确定参数值应该是5的?
      【解决方案5】:

      我在 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);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-06
        相关资源
        最近更新 更多