位图操作是 Android 开发中的一项常见任务,通常涉及将位图转换为字节数组以进行数据存储或传输。然而,一些开发人员在尝试执行此转换时遇到困难,导致出现以下问题:
问:为什么使用 copyPixelsToBuffer 转换位图后复制的字节数组用零填充?
提供的代码片段演示了使用 copyPixelsToBuffer 将位图转换为字节数组的尝试,但生成的缓冲区仅包含零。为了理解这个问题的原因,我们来分析一下代码:
经过进一步检查,很明显问题出在 copyPixelsToBuffer 方法本身。当使用不可变位图时,它不执行实际的像素复制,而是返回重复的引用。因此,对位图的任何后续修改都不会反映在复制的缓冲区中。
要有效地将位图转换为字节数组,有一个替代方法必须受雇。一种可靠的方法是使用 PNG 或 JPEG 等格式压缩位图,并将压缩数据存储在字节数组中。下面是一个示例:
Bitmap bmp = intent.getExtras().get("data"); ByteArrayOutputStream stream = new ByteArrayOutputStream(); bmp.compress(Bitmap.CompressFormat.PNG, 100, stream); byte[] byteArray = stream.toByteArray(); bmp.recycle();
此代码片段遵循以下步骤:
请记住,还可以使用 BitmapFactory 类从字节数组中检索位图数据:
BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
以上是为什么使用 copyPixelsToBuffer 转换位图后我的字节数组包含零?的详细内容。更多信息请关注PHP中文网其他相关文章!