我正在尝试从已加载到位图的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);
然后画布创作起作用。我有什么想法吗?
答案 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);
看看是否有效。