我们如何使用 CameraX 获取预览帧?

Shu*_*hal 2 android android-camera android-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 )
}
Run Code Online (Sandbox Code Playgroud)

我的问题是如何byte[]使用 CameraX 从预览帧中获取原始对象。我期待类似于onPreviewFrame(byte[] data, Camera camera)方法的东西。

基本上,我想要使用 CameraX 预览的实时帧( inbyte[]Bitmap)。

Ale*_*ohn 7

您将使用ImageAnalysis。预览帧将以 YUV_420_888 格式传递给您的分析器。

如有必要,您可以请求非阻塞分析模式。我建议为您的分析器设置一个处理程序,以便相机回调不会到达 UI 线程。

  • 如果您还将“VideoCapture”与“Preview”一起使用怎么办?在这种情况下,您会因尝试“绑定太多用例”而遇到异常。在这里查看我的问题:/sf/ask/4306727001/ (4认同)