0

我正在尝试从已加载到位图中的 PNG 文件创建画布,但它给出了错误。这是代码:

public Bitmap CABINET_Bitmap;

AssetManager assetManager = this.getAssets();
inputStream = assetManager.open("background.png");
CABINET_Bitmap = BitmapFactory.decodeStream(inputStream);

// Next line gives error
Canvas cv = new Canvas(CABINET_Bitmap);

如果我通过执行以下操作创建位图,而不是加载它:

CABINET_Bitmap = Bitmap.createBitmap(480, 640, Config.RGB_565);
Canvas cv = new Canvas(CABINET_Bitmap);

然后画布创建工作。任何想法我做错了什么?

4

1 回答 1

0

该文档指出:

使用要绘制的指定位图构造一个画布。位图必须是可变的。

画布的初始目标密度与给定位图的密度相同。

所以我假设是BitmapFactory.decodeStream()返回一个不可变的位图,而Bitmap.createBitmap()返回一个可变的位图。相反,使用BitmapFactory.Options并设置inMutable为 true。

BitmapFactory.Options o = new BitmapFactory.Options();
o.inMutable = true;
CABINET_Bitmap = BitmapFactory.decodeStream(inputStream, o);
Canvas cv = new Canvas(CABINET_Bitmap);

看看这是否有效。

于 2012-08-09T14:27:50.607 回答