使用Android camera2进行手动对焦和闪光灯拍摄

4

如何使用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);

结果: 当光线足够时,相机会自动对焦。否则,闪光灯会快速闪烁并导致对焦失败。

你想做什么并不清楚。你是在使用手动曝光,但想要打开闪光灯进行对焦,还是只想让闪光灯在最终捕捉时触发?或者完全是其他的事情?现在你既要触发单个闪光灯,又试图在一个请求中触发自动对焦,这很可能不会起作用。 - Eddy Talvala
我想让闪光灯在对焦和最终拍摄时触发。就像 Google 相机应用程序的“开启闪光灯”模式。 - Maxim Metelskiy
如果您正在使用AE_MODE_OFF,则必须手动管理闪光灯,目前仅有有限的方式可供选择。在开始对焦之前,您需要将闪光灯切换到TORCH,然后将其设置为SINGLE以进行高分辨率捕捉。 - Eddy Talvala
谢谢,@Eddy!我考虑过这种方式。但是它看起来像是一个hack。使用camera2 API实现“始终开启闪光灯”功能真的那么复杂吗? - Maxim Metelskiy
1个回答

2
您可以通过以下方式尝试使用闪光灯进行手动(触摸)对焦:
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吗? - Maxim Metelskiy
闪光灯一直开启:mBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_TORCH); - yydcdut
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - yydcdut
我不需要手电筒。我需要闪光灯始终处于相机模式下。这意味着,闪光灯必须仅在每次拍摄和对焦时触发。但它不应该取决于光线条件。 - Maxim Metelskiy
我尝试使用TEMPLATE_MANUAL。我的问题是我不理解CONTROL_AE_MODE和FLASH_MODE之间的区别。它们之间有什么不同?FLASH_MODE负责什么? - Maxim Metelskiy
mPreviewBuilder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON_ALWAYS_FLASH); 预览生成器设置(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON_ALWAYS_FLASH); - yydcdut

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接