【问题标题】:Manual focus with flash using Android camera2使用 Android camera2 使用闪光灯手动对焦
【发布时间】:2014-12-23 09:04:24
【问题描述】:

如何使用 Android camera2 api 使用闪光灯进行手动(触摸)对焦?

我的 captureRequest 设置是: 1. 类型 - TEMPLATE_PREVIEW 2. CONTROL_AE_MODE - CONTROL_AE_MODE_OFF 3. FLASH_MODE - FLASH_MODE_SINGLE 4. CONTROL_AF_TRIGGER - CONTROL_AF_TRIGGER_START

用法:

CaptureSession.capture(captureRequest.build(), captureCallback, null);

结果: 如果有足够的光线,相机就会对焦。否则闪光灯会快速闪烁,对焦失败。

【问题讨论】:

  • 不清楚你想做什么。您是使用手动曝光但想要打开闪光灯进行对焦,还是只想让闪光灯闪光以进行最终拍摄?还是完全不同的东西?现在,您既要触发一次闪光灯,又要尝试在一个请求中触发 AF,这不太可能奏效。
  • 我想让闪光灯用于对焦和最终拍摄。像谷歌相机应用的“闪光”模式
  • 如果您使用的是AE_MODE_OFF,则必须手动管理闪存,目前只能通过有限的方式进行。在开始对焦之前,您需要将闪光灯切换到 TORCH,然后将其设置为 SINGLE 以进行高分辨率拍摄。
  • 谢谢你,@Eddy!我是这样想的。但它看起来像一个黑客。使用 camera2 API 时,“Flash always on”真的如此复杂吗?

标签: camera android-camera autofocus camera2


【解决方案1】:

您可以尝试通过这种方式使用闪光灯进行手动(Touch)对焦:

mPreviewBuilder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON_AUTO_FLASH);

使用TRIGGER时,同时使用AE和AF:

mPreviewBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_CANCEL);
mPreviewBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_START);
mPreviewBuilder.set(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER, CameraMetadata.CONTROL_AE_PRECAPTURE_TRIGGER_START);

然后:

mCameraCaptureSession.setRepeatingRequest(mPreviewBuilder.build(), mPreviewSessionCallback, mHandler);

【讨论】:

  • 感谢您的回复!我忘了提,我总是需要闪光灯,而不是汽车。而且我不确定“setRepeatingRequest”。触摸焦点只是一个动作。最后一个问题:我可以通过 FLASH_MODE 参数而不是 CONTROL_AE_MODE 来管理 flash 的工作吗?
  • FLASH 始终开启:mBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_TORCH);
  • "setRepeatingRequest" 在 SDK 文档中的意思是“请求通过这个捕获会话不断重复捕获图像”。
  • 我不需要手电筒。我需要闪光灯始终作为相机模式。这意味着,只能在每次拍摄和每次对焦时触发闪光灯。但这不应该取决于光照条件。
  • 我尝试使用 TEMPLATE_MANUAL。我的问题是我无法理解 CONTROL_AE_MODE 和 FLASH_MODE 之间的区别。它们之间有什么区别? FLASH_MODE 负责什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-26
  • 1970-01-01
  • 2018-08-31
相关资源
最近更新 更多