Android Composable - рисование в анализаторе изображений

Я новичок в использовании Composable framework для создания пользовательского интерфейса. Однако я пытаюсь нарисовать прямоугольник из набора границ. Однако при попытке рисования в анализаторе изображений я получаю следующую ошибку:

      @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)
    }
}

0 ответов

Другие вопросы по тегам