2011-07-20 5 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

संभव डुप्लिकेट [एंड्रॉयड अपरिवर्तनीय बिटमैप दुर्घटना त्रुटि] (http://stackoverflow.com/questions/13119582/android-immutable-bitmap-crash-error) –

उत्तर

53

मुझे लगता है कि अपने Bitmap परिवर्तनशील नहीं है (setPixel()'s documentation देखें)।

यदि ऐसा है, तो इस बिटमैप की एक परिवर्तनीय प्रति बनाएं (उदाहरण के रूप में Bitmap.copy(Bitmap.Config config, boolean isMutable) का उपयोग करके) और इस पर काम करें।

5

अधिकांश शायद अपनी pic अपरिवर्तनीय है के साथ अवैध राज्य अपवाद हो रही है। डिफ़ॉल्ट रूप से, ड्रायबल से बनाए गए किसी भी बिटमैप अपरिवर्तनीय होगा।

यदि आप किसी मौजूदा बिटमैप संशोधित करने की जरूरत है, तो आप निम्न करना चाहिए:

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

की