内存和保存到文件位图对于相同的字节[]是不同的

时间:2015-04-17 02:58:29

标签: android bitmap png

我有一个字节数组。然后我像这样从它创建一个Bitmap对象并将其显示在ImageView中:

Bitmap image = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
ByteBuffer buffer = ByteBuffer.wrap(bytes);
image.copyPixelsFromBuffer(buffer);
...
ImageView imgView = (ImageView) findViewById(R.id.image);
imgView.setImageBitmap(image);

然后我创建一个文件并将此字节数组存储为图像

FileOutputStream fOut = new FileOutputStream(file);
image.compress(Bitmap.CompressFormat.PNG, 100, fOut);
fOut.flush();
fOut.close();

当我在Gallery中打开此文件时,它看起来与ImageView中的文件不同。我尝试将字节直接写入文件,而不是Bitmap,但后来我根本无法打开图像。

ImageView的:

画廊:

enter image description here

我以为Bitmap.CompressFormat.PNG,忍受不压缩。我在这里缺少什么?

编辑:

我不知道它是否重要,但原始字节数组来自加密来自原始图片的另一个字节数组。我从磁盘加载了一个图像,创建了一个字节数组,修改了它,然后用它来尝试上面的内容。

1 个答案:

答案 0 :(得分:1)

这可能是因为您在应用和图库中使用不同的背景颜色查看图像。由于您使用Bitmap.Config.ARGB_8888并有效地为其提供随机数据,因此在生成的图像中某些像素将是透明的,并且当您查看图像时,背景的颜色将“透过”。如果您将应用的背景颜色设置为黑色,则图像可能与图库中的颜色相同。