【androidjava】mutableな状態のBitmapをCanvasに受け渡す方法

DrawableからBitmapを取得して、キャンバスに移す作業をしていたのですが、

CanvasにそのままBitmapを渡そうとしたらクラッシュが発生。

問題のコード↓

Bitmap icon = null;
Drawable clusterIconD = mapView.getContext().getResources().getDrawable(R.drawable.yellowmarker);
            icon = ((BitmapDrawable) clusterIconD).getBitmap();
Bitmap mutableBitmap = icon.copy(Bitmap.Config.ARGB_8888, true);
        Canvas iconCanvas = new Canvas(mutableBitmap);

エラーの内容は次の通り。


Immutable bitmap passed to Canvas constructor

getBitmapで抽出したBitmapは、immutableの状態にあるということ(一度

Bitmapに変換した場合状態を変更することができない)。

対処法:Bitmapに含まれているcopyメソッドを使うことでmutableな状態に変更することができる。

mutableな状態に変更したことでCanvasに渡した結果、無事例外を回避することができた。

長らくCanvasを使っていなかったので許容範囲をすっかり忘れていました。

Bitmap icon = null;
Drawable clusterIconD = mapView.getContext().getResources().getDrawable(R.drawable.yellowmarker);
            icon = ((BitmapDrawable) clusterIconD).getBitmap();
Bitmap mutableBitmap = icon.copy(Bitmap.Config.ARGB_8888, true);
        Canvas iconCanvas = new Canvas(mutableBitmap);

 

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG