浜松のWEBシステム開発・スマートフォンアプリ開発・RTK-GNSS関連の開発はお任せください
株式会社シーポイントラボ
TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:静岡県浜松市中区富塚町1933-1 佐鳴湖パークタウンサウス2F

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

 

  • この記事いいね! (0)