首页  >  文章  >  Java  >  为什么在位图上调用 copyPixelsToBuffer() 后缓冲区中的所有字节都为 0?

为什么在位图上调用 copyPixelsToBuffer() 后缓冲区中的所有字节都为 0?

Linda Hamilton
Linda Hamilton原创
2024-11-05 10:18:02417浏览

Why are all bytes in my buffer 0 after calling copyPixelsToBuffer() on a Bitmap?

Java:将位图转换为字节数组

尝试使用提供的代码将位图对象转换为字节数组时,用户可能会遇到调用 copyPixelsToBuffer() 后缓冲区中的所有字节仍为 0 的问题。尽管从相机返回的位图是不变的,但它不应该影响复制过程。

潜在的根本原因:

代码片段使用 ByteBuffer 类来分配内存并复制位图的像素进入缓冲区。但是,它直接访问底层缓冲区而没有正确设置其偏移量。这可能会导致 get() 方法仅返回 0 个值。

解决方案:

要纠正此问题,请考虑使用以下方法:

<code class="java">Bitmap bmp = intent.getExtras().get("data");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
bmp.recycle();</code>

在此改进的代码:

  • 创建了 ByteArrayOutputStream 流,可用于捕获要转换为字节数组的数据。
  • 在 Bitmap 对象上调用 compress() 方法将其像素转换为 PNG 格式并将其写入 ByteArrayOutputStream。
  • 最后,toByteArray() 方法将 ByteArrayOutputStream 的内容转换为字节数组。

通过使用此方法,您可以有效地将 Bitmap 对象转换为字节数组,而不会遇到缓冲区下溢问题。

以上是为什么在位图上调用 copyPixelsToBuffer() 后缓冲区中的所有字节都为 0?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn