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()返す一方で、可変のビットマップを返すことです。代わりに、trueBitmapFactory.Optionsに設定して使用してください。inMutable

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 に答える