2011-07-20 38 views
21

イメージを編集しようとしています。 setPixelsでエラーが発生しています。setPixelsでエラーが発生しました

 picw = pic.getWidth(); 
     pich = pic.getHeight(); 
     picsize = picw*pich;   
     int[] pix = new int [picsize]; 
     pic.getPixels(pix, 0, picw, 0, 0, picw, pich); 
     pic.setPixels(pix,0,pic.getWidth(),0,0,pic.getWidth(),pic.getHeight()); 

が、私はおそらくあなたのpicは不変であるのsetPixels

Caused by: java.lang.IllegalStateException 
    at android.graphics.Bitmap.setPixels(Bitmap.java:878) 
    at com.sandyapps.testapp.testapp.onCreate(testapp.java:66) 
+1

[Android不変ビットマップクラッシュエラー](http://stackoverflow.com/questions/13119582/android-immutable-bitmap-crash-error)の重複) –

答えて

53

私はあなたのBitmapは(setPixel()'s documentationを参照)変更可能ではないと思います。

もしそうなら、このビットマップの変更可能なコピーを作成し(例としてBitmap.copy(Bitmap.Config config, boolean isMutable)を使用)、このファイルで作業してください。

5

で不正な状態の例外を取得しています。デフォルトでは、drawableから作成されたビットマップはすべて不変です。既存のビットマップを変更する必要がある場合は、次の操作を行う必要があり

// Create a bitmap of the same size 
Bitmap newBmp = Bitmap.createBitmap(pic.getWidth(), pic.getHeight(), Config.ARGB); 
// Create a canvas for new bitmap 
Canvas c = new Canvas(newBmp); 

// Draw your old bitmap on it. 
c.drawBitmap(pic, 0, 0, new Paint()); 
+0

'Config.ARGB_8888'が必要な場合があります。 'Config.ARGB'は私に 'シンボルを解決できません'というエラーを出していました。 –

1

それは簡単ですが、ちょうど可変ビットマップにそれを変更するには、次のコマンドを使用します。

myBitmap = myBitmap.copy(Bitmap.Config.ARGB_8888 , true); 

今、ビットマップmyBitmapは、同じビットマップに置き換えられますが

あなたが選択することもでき、この時間は変更可能ですピクセルを格納する別の方法(ARGB_8888など): https://developer.android.com/reference/android/graphics/Bitmap.Config.html

関連する問題