如何将android.media.Image转换为位图对象?

ome*_*ega 17 android image

在android中,我从这里获得了一个Image对象https://inducesmile.com/android/android-camera2-api-example-tutorial/这个相机教程.但是我现在想要循环显示像素值,是否有人知道我该怎么做?我是否需要将其转换为其他内容,我该怎么做?

谢谢

Rod*_*uin 17

如果你想在整个像素中循环所有,那么你需要先将它转换为Bitmap对象.现在,因为我在源代码中看到它返回的内容Image,您可以直接将字节转换为位图.

    Image image = reader.acquireLatestImage();
    ByteBuffer buffer = image.getPlanes()[0].getBuffer();
    byte[] bytes = new byte[buffer.capacity()];
    buffer.get(bytes);
    Bitmap bitmapImage = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, null);
Run Code Online (Sandbox Code Playgroud)

然后,一旦获得位图对象,您现在可以遍历所有像素.

  • 我明白了,所以这只适用于 JPEG 图像。相机通常使用 3 个(?)平面输出 YUV 图像。那么,飞机是否会按顺序附加? (4认同)
  • 为什么只拿到第一架飞机?其他位面没有相关数据吗? (3认同)
  • 它将图像从缓冲区加载到字节数组.所以`get`是从图像缓冲区中检索字节. (2认同)
  • `IllegalStateException: BitmapFactory.decodeByte…tes, 0, bytes.size, null) 不能为 null` (2认同)
  • 转换 DEPTH16 图像时遇到与位图为空相同的问题“尝试在 a 上调​​用虚拟方法 'boolean android.graphics.Bitmap.compress(android.graphics.Bitmap$compressFormat, int, java.io.OutputStream)'空对象引用``` (2认同)

小智 5

YuvToRgbConverter 对于从图像到位图的转换非常有用。

https://github.com/android/camera-samples/blob/master/Camera2Basic/utils/src/main/java/com/example/android/camera/utils/YuvToRgbConverter.kt

使用示例。

   val bmp = Bitmap.createBitmap(image.width, image.height, Bitmap.Config.ARGB_8888)
   yuvToRgbConverter.yuvToRgb(image, bmp)
Run Code Online (Sandbox Code Playgroud)