例えば以下のように、getPixelsでBitmapの配列を取り出して何かしらの変換をし、setPixelsでBitmapに戻そうとする場合を考えます。
// bmp:Bitmapインスタンス int width = bmp.getWidth(); int height = bmp.getHeight(); bmpSize = width*height; int[] bmpArray = new int [bmpSize]; bmp.getPixels(bmpArray, 0, width, 0, 0, width, height); // bmpArrayを変換する処理 // bmpArrayをBitmapに代入 bmp.setPixels(bmpArray, 0, width, 0, 0, width, height);
すると下記のようなエラーが出るかもしれません。
「Caused by: java.lang.IllegalStateException」
### BitmapをMutableにする必要がある
なぜIllegalStateExceptionのエラーが出るかというと、普通のBitmapはImmutable(不変)で設定されていてBitmapを書き換えられないからです。そこで、Mutable(可変)な状態のBitmapをコピーして作る必要があります。
Bitmap bmp2 = bmp.copy(Bitmap.Config.ARGB_8888,true); // bmp2に対してsetPixelsを実行する
これで、IllegalStateExceptionエラーが出なくなります。