在Android中从加载的PNG创建画布

时间:2012-08-09 14:16:33

标签: android canvas bitmap png

我正在尝试从已加载到位图的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);

然后画布创作起作用。我有什么想法吗?

1 个答案:

答案 0 :(得分: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);

看看是否有效。