2011-07-20 5 views
21

Próbuję edytować zdjęcia. ale dostaję błędy z setPixels.błąd z 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()); 

ale otrzymuję nielegalnej wyjątku państwa z setPixels

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

możliwe duplikat [Android Niezmienne błąd katastrofy bitmap] (http://stackoverflow.com/questions/13119582/android-immutable-bitmap-crash-error) –

Odpowiedz

53

Myślę, że Bitmap nie jest zmienny (patrz setPixel()'s documentation).

Jeśli tak, utwórz zmienną kopię tej mapy bitowej (używając na przykład Bitmap.copy(Bitmap.Config config, boolean isMutable)) i pracuj nad nią.

5

Najprawdopodobniej Twój pic jest niezmienna. Domyślnie każda bitmapa utworzona z losowania byłaby niezmienna.

Jeśli trzeba zmodyfikować istniejące mapy bitowej, należy wykonać następujące czynności:

// 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

Może być wymagane 'Config.ARGB_8888'. 'Config.ARGB' dawał mi błąd" nie można rozwiązać symbolu ". –

1

To proste, wystarczy użyć następującego polecenia, aby zmienić go na zmienny Bitmap:

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

Teraz bitmapy myBitmap zostaje zastąpiona przez tę samą bitmapę, ale tym razem jest zmienny

Można również wybrać innym sposobem przechowywania pikseli (ARGB_8888 etc ..): https://developer.android.com/reference/android/graphics/Bitmap.Config.html