2011-07-20 21 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()); 

但我正在逐漸非法狀態異常的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

最有可能你的pic是不可改變的。默認情況下,從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'給了我一個'無法解析符號'的錯誤。 –