创建Bitmap的子集而不进行复制

时间:2011-01-10 16:22:29

标签: android

我有这个问题,当我尝试为另一个创建一个新的位图时, 像这样:

first_data = Bitmap.createBitmap(data, 0, 0, data.getWidth() / 2,data.getHeight()); 
second_data =  Bitmap.createBitmap(data, data.getWidth() / 2, 0, data.getWidth() / 2, 
data.getHeight() ); 

我遇到了OutOfMemoryException ...

如果我只使用原始的完整图像,我不会遇到这个问题,我认为Bitmap.createBitmap()会复制原始的第一张图像。 有一种方法可以指明我不想复制它吗? 非常感谢!

1 个答案:

答案 0 :(得分:1)

不幸的是,似乎:

  • BitMap.createBitmap() 你正在使用的签名是 正确的“子集”位图的方法
  • 同样的方法contract 允许它返回一个视图 在相同的字节上复制它们

如果您的原始位图是不可变的(isMutable()== false),那么会鼓励它基于相同的字节数组返回一个对象,而不是复制它。

要获取不可变位图,可以尝试createBitmap(Bitmap)并丢弃对原始位图的所有引用(和/或使用recycle())?