2

我想处理预览中显示的图像并显示处理后的版本。

我尝试使用分析器中的 imageProxy 对其进行修改,但这似乎没有做任何事情。

我知道较旧的相机 API 能够做到这一点,但 CameraX 似乎没有 API。

4

2 回答 2

1

不,cameraX 不支持此流程。实际上,这个用例从未被任何 Android 相机 API 支持。您需要做的是创建自己的渲染器(最好是 OpenGL),隐藏原生预览表面,并将修改后的帧发送到您的渲染器。

于 2019-09-08T09:06:15.620 回答
0

希望这会有所帮助:


        val mediaImage = imageProxy.image ?: return
        var bitmap = ImageUtils.convertYuv420888ImageToBitmap(mediaImage)

        val rotationDegrees = imageProxy.imageInfo.rotationDegrees

        val matrix = Matrix()
        matrix.postRotate(rotationDegrees.toFloat())

        bitmap =
            Bitmap.createBitmap(bitmap, 0, 0, mediaImage.width, mediaImage.height, matrix, true)
        val cropHeight = if (bitmap.width < previewView.width) {
            // if preview area larger than analysing image
            val koeff = bitmap.width.toFloat() / previewView.width.toFloat()
            previewView.height.toFloat() * koeff
        } else {
            // if preview area smaller than analysing image
            val prc = 100 - (previewView.width.toFloat() / (bitmap.width.toFloat() / 100f))
            previewView.height + ((previewView.height.toFloat() / 100f) * prc)
        }

        val cropTop = (bitmap.height / 2) - ((cropHeight) / 2)

        if (cropTop > 0) {
            Bitmap.createBitmap(bitmap, 0, cropTop.toInt(), bitmap.width, cropHeight.toInt())
                .also { process(it, imageProxy) }
        } else {
            imageProxy.image?.let { process(it, imageProxy) }
        }
于 2021-12-17T13:08:01.933 回答