无法将 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中文网其他相关文章!