【问题标题】:green bitmap on analyze in cameraX when imageproxy to bitmap by using Samsung S20使用三星 S20 imageproxy 到位图时在 cameraX 中分析绿色位图
【发布时间】:2020-10-27 06:09:32
【问题描述】:

我已经使用底部代码。但它出现绿色位图 当我使用 imageproxy 仅对最新的智能手机进行位图时。 比如三星s20

底部代码在过去的设备上运行良好 谁有问题?

fun Image.toBitmap(): Bitmap {
val yBuffer = planes[0].buffer // Y
val uBuffer = planes[1].buffer // U
val vBuffer = planes[2].buffer // V

val ySize = yBuffer.remaining()
val uSize = uBuffer.remaining()
val vSize = vBuffer.remaining()

val nv21 = ByteArray(ySize + uSize + vSize)

//U and V are swapped
yBuffer.get(nv21, 0, ySize)
vBuffer.get(nv21, ySize, vSize)
uBuffer.get(nv21, ySize + vSize, uSize)

val yuvImage = YuvImage(nv21, ImageFormat.NV21, this.width, this.height, null)
val out = ByteArrayOutputStream()
yuvImage.compressToJpeg(Rect(0, 0, yuvImage.width, yuvImage.height), 50, out)
val imageBytes = out.toByteArray()
return BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.size)
}

【问题讨论】:

  • 我对 android-camerax 一无所知,但您似乎以某种方式弄乱了数组的列大小。再次检查行、列、通道和步幅。
  • 嗨@You.Brighton,我得到了相同的结果,但在不同的设备上,你能就这个问题提供一点帮助吗?

标签: android image bitmap android-camerax


【解决方案1】:
val nv21 = ByteArray(ySize + uSize + vSize)

并非每个YUV_420_888 缓冲区实际上都是 NV21 格式。您还必须处理其他格式,例如NV12、YU12 和 YV12。 camera samples Github repo 上有一个YUV to bitmap converter sample,试试看,它应该可以正常工作。

【讨论】:

  • 感谢您的回答。我找到了解决方案。那是分辨率问题..
猜你喜欢
  • 1970-01-01
  • 2020-09-30
  • 1970-01-01
  • 2014-04-19
  • 1970-01-01
  • 2015-10-11
  • 1970-01-01
  • 2012-08-28
  • 2023-03-18
相关资源
最近更新 更多