首页  >  文章  >  Java  >  为什么我的 Java 代码无法将位图转换为字节数组?

为什么我的 Java 代码无法将位图转换为字节数组?

Linda Hamilton
Linda Hamilton原创
2024-11-05 14:53:02404浏览

Why Does My Java Code Fail to Convert a Bitmap to a Byte Array?

无法将 Java 位图转换为字节数组

该代码片段致力于将 Java 位图转换为字节数组以进行进一步处理。但是,尝试将位图像素复制到缓冲区时会发生意外错误。复制的数据始终返回全零。尽管从相机返回的位图是不可变的,但还是会出现此问题。

要了解根本问题,请考虑以下事项:

  bmp.copyPixelsToBuffer(b);

  byte[] bytes = new byte[size];

  try {
     b.get(bytes, 0, bytes.length);
  } catch (BufferUnderflowException e) {
     // always happens
  }

copyPixelsToBuffer 方法将像素数据从位图复制到提供的缓冲区。但缓冲区大小不正确,导致缓冲区下溢异常。要解决此问题,请使用 b.limit() 返回的缓冲区大小而不是 size:

byte[] bytes = new byte[b.limit()];

此外,处理缓冲区下溢异常的条件逻辑不是必需的。无论条件如何,都会发生异常,因为缓冲区始终尺寸不足。

替代方法

不要使用有问题的 copyPixelsToBuffer 方法,请考虑使用替代方法进行转换位图转换为字节数组:

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

在此方法中,位图被压缩为 PNG 格式的字节数组。此方法保证位图的有效字节数组表示。

以上是为什么我的 Java 代码无法将位图转换为字节数组?的详细内容。更多信息请关注PHP中文网其他相关文章!

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