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);