【发布时间】:2020-01-10 06:53:22
【问题描述】:
我想处理预览中显示的图像并显示处理后的版本。
我尝试使用分析器中的 imageProxy 对其进行修改,但这似乎没有做任何事情。
我知道旧的相机 api 可以做到这一点,但 CameraX 似乎没有 api。
【问题讨论】:
标签: android android-ndk android-camerax
我想处理预览中显示的图像并显示处理后的版本。
我尝试使用分析器中的 imageProxy 对其进行修改,但这似乎没有做任何事情。
我知道旧的相机 api 可以做到这一点,但 CameraX 似乎没有 api。
【问题讨论】:
标签: android android-ndk android-camerax
不,cameraX 不支持此流程。实际上,这个用例从来没有 任何 Android 相机 API 都支持。您要做的就是创建自己的渲染器(最好是 OpenGL),隐藏本机预览表面,并将修改后的帧发送到您的渲染器。
【讨论】:
希望这会有所帮助:
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) }
}
【讨论】: