android - Android Camera2 高速捕捉,焦点改变
问题描述
我想在高速相机捕捉中实现焦点控制(FOCUS_DISTANCE)。
在拍照过程中,我只能通过 onCaptureCompleted 回调来实现。之后,我可以在Result中通过LENS_STATE查看镜头是否移动完毕,但这只会得到镜头的当前状态,也就是说,当对焦范围很长时,这个值将始终为1(正在移动)。我想在任何地方看到镜头状态,但在回调函数中,我应该怎么做?
例如,连续高速拍摄100张照片时,我想检查拍摄照片时镜头是否在移动。我做的粗略方案是使用2个队列分别记录100个结果和100张照片,在拍摄结束时我可以得到每张照片对应的镜头状态。
谢谢你的帮助!
private fun changeFocalWithCapture(focal: Float) {
val captureRequest = session.device.createCaptureRequest(
CameraDevice.TEMPLATE_PREVIEW).apply { addTarget(imageReader.surface) }
println(captureRequest)
captureRequest.set(CaptureRequest.CONTROL_AF_MODE, 0)
captureRequest.set(CaptureRequest.LENS_FOCUS_DISTANCE, focal)
session.capture(captureRequest.build(), object : CameraCaptureSession.CaptureCallback() {
override fun onCaptureCompleted(
session: CameraCaptureSession,
request: CaptureRequest,
result: TotalCaptureResult) {
val d1 = result[CaptureResult.LENS_FOCUS_DISTANCE]
val lenState = result.get(CaptureResult.LENS_STATE)
correctNum+=1
val endTime = System.currentTimeMillis()
Log.v("current Time",(endTime-beginTime).toString())
Log.v("current num", correctNum.toString())
}
}, cameraHandler)
}
解决方案
推荐阅读
- android - 如何修复 qml TextField 在 android 上的行为不端?
- java - 客户端服务器请求过滤
- java - 如何在没有 Jackson 或 GSON 的情况下更改 POJO 类中的文件名称?
- aws-fargate - AWS Fargate 对部署“Web”服务堆栈有用吗?
- javascript - 角度菜单显示不正确
- reactjs - 错误:HostObject::set 中的异常:无法安装 NativeModules:操作不受支持
- google-chrome - 创建一个在 Intellij 中打开文件的 Web 浏览器链接。可能的?
- java - 选择 INSTALLDIR 时 jre(Java) 抛出错误的静默模式设置
- javascript - 当事件处理程序附加到父级时,防止在某个子级之后单击
- xamarin.android - 单击浮动操作按钮时,属性 android:onClick="FabOnClick" 会使应用程序崩溃