首页 > 解决方案 > Android Composable - 在图像分析器中绘图

问题描述

我是使用可组合框架创建 UI 的新手。但是,我试图从一组边界中绘制一个矩形。但是,尝试在图像分析器中绘图时出现以下错误:

@Composable invocations can only happen from the context of a @Composable function

关于如何解决这个问题的任何想法?

我的代码摘录:

@Composable
fun DisplayCamera() {
    val lifecycleOwner = LocalLifecycleOwner.current
    val context = LocalContext.current
    val cameraProviderFuture = remember { ProcessCameraProvider.getInstance(context) }

    AndroidView(modifier = Modifier.fillMaxSize(), factory = { _context ->
        val previewView = PreviewView(_context)
        val executor = ContextCompat.getMainExecutor(_context)

        cameraProviderFuture.addListener({
            val cameraProvider = cameraProviderFuture.get()

            val preview = Preview.Builder().build().also {
                    it.setSurfaceProvider(previewView.surfaceProvider)
            }

            val cameraSelector = CameraSelector.Builder()
                .requireLensFacing(CameraSelector.LENS_FACING_FRONT)
                .build()

            val analyzer = ImageAnalysis.Builder()
                .build()
                .also {
                    it.setAnalyzer(executor, PersonDetector(_context) Analyzer@{ results ->

                        drawBounds(results)

                        Log.i("MM_Camera", "$results")
                    })
                }



            cameraProvider.unbindAll()
            cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, preview, analyzer)
        }, executor)

        previewView
    })
}

填充代码为drawBounds

@Composable
fun drawBounds(results: List<Detection>) {
    Canvas1(modifier = Modifier.fillMaxSize()) {
        drawRect(Color.Blue, topLeft = Offset(0f, 0f), size = Size(this.size.width, 55f))
        drawCircle(Color.Red, center = Offset(50f, 200f), radius = 40f)
    }
}

标签: androidcomposable

解决方案


推荐阅读