我们如何使用 CameraX 获取预览帧?
How do we get the preview frame using CameraX?
我正在开发一个项目,该项目使用 CameraX 在 TextureView
上显示相机预览。代码来自这个 codelab。我使用 setOnPreviewOutputUpdateListener()
方法更新 TextureView
.
private fun startCamera() {
val previewConfig = PreviewConfig.Builder().apply {
setTargetAspectRatio( Rational( 1 , 1 ) )
setTargetResolution( Size( 640 , 640 ) )
}.build()
val preview = Preview( previewConfig )
preview.setOnPreviewOutputUpdateListener {
val parent = cameraTextureView?.parent as ViewGroup
parent.removeView( cameraTextureView )
cameraTextureView?.surfaceTexture = it.surfaceTexture
parent.addView( cameraTextureView , 0)
updateTransform()
}
preview.removePreviewOutputListener()
CameraX.bindToLifecycle( this , preview )
}
我的问题是如何使用 CameraX 从预览帧中获取原始 byte[]
对象。我期待类似于 onPreviewFrame(byte[] data, Camera camera)
方法的东西。
Basically, I want the realtime frames ( in byte[]
or Bitmap
) from the preview using CameraX.
您将使用 ImageAnalysis。预览帧将以 YUV_420_888 格式传递给您的分析器。
如有需要,可以申请非阻塞分析模式。我建议为您的分析器设置一个处理程序,这样相机回调就不会到达 UI 线程。
我正在开发一个项目,该项目使用 CameraX 在 TextureView
上显示相机预览。代码来自这个 codelab。我使用 setOnPreviewOutputUpdateListener()
方法更新 TextureView
.
private fun startCamera() {
val previewConfig = PreviewConfig.Builder().apply {
setTargetAspectRatio( Rational( 1 , 1 ) )
setTargetResolution( Size( 640 , 640 ) )
}.build()
val preview = Preview( previewConfig )
preview.setOnPreviewOutputUpdateListener {
val parent = cameraTextureView?.parent as ViewGroup
parent.removeView( cameraTextureView )
cameraTextureView?.surfaceTexture = it.surfaceTexture
parent.addView( cameraTextureView , 0)
updateTransform()
}
preview.removePreviewOutputListener()
CameraX.bindToLifecycle( this , preview )
}
我的问题是如何使用 CameraX 从预览帧中获取原始 byte[]
对象。我期待类似于 onPreviewFrame(byte[] data, Camera camera)
方法的东西。
Basically, I want the realtime frames ( in
byte[]
orBitmap
) from the preview using CameraX.
您将使用 ImageAnalysis。预览帧将以 YUV_420_888 格式传递给您的分析器。
如有需要,可以申请非阻塞分析模式。我建议为您的分析器设置一个处理程序,这样相机回调就不会到达 UI 线程。