2013-01-25 13 views
12

मेरे पास एक एंड्रॉइड ऐप है जो बिटमैप के रूप में एक छवि लोड करता है और इसे एक छवि दृश्य में प्रदर्शित करता है। समस्या यह है कि छवि में पारदर्शी पृष्ठभूमि दिखाई देती है; इससे काले पृष्ठभूमि के खिलाफ गायब होने के लिए छवि पर कुछ काले पाठ का कारण बनता है।एंड्रॉइड बिटमैप: पारदर्शी पिक्सल को रंग में बदलें

यदि मैं छवि दृश्य पृष्ठभूमि को सफेद पर सेट करता हूं, तो इस तरह के काम करता है, लेकिन मुझे छवि पर बदसूरत बड़ी सीमाएं मिलती हैं जहां इसे माता-पिता फिट करने के लिए बढ़ाया जाता है (वास्तविक छवि मध्य में स्केल की जाती है)।

तो - मैं बिटकमैप में पारदर्शी पिक्सेल को ठोस रंग में परिवर्तित करना चाहता हूं - लेकिन मुझे यह नहीं पता कि यह कैसे करना है!

किसी भी मदद की सराहना की जाएगी!

धन्यवाद क्रिस

+0

यदि आपके पास स्क्रीन शॉट था जो वास्तव में मदद करेगा। यह मुझे लगता है जैसे आप इसे गलत तरीके से हल करने की कोशिश कर रहे हैं। मैं जिस प्रभाव को आप चाहते हैं उसे प्राप्त करने के लिए मैं एक-दूसरे के शीर्ष पर प्रयास और परत दृश्यों का प्रयास करूंगा। इस तरह आपके पास मुख्य बैकगाउंड कलर व्यू है, फिर इसे अपनी सफेद पृष्ठभूमि और स्रोत छवि के साथ एक छवि दृश्य के साथ ओवरले करें। – Nathan

उत्तर

22

आप एक संसाधन के रूप में छवि भी शामिल कर रहे हैं, तो यह सिर्फ gimp की तरह एक कार्यक्रम में छवि अपने आप को संपादित करने के लिए सबसे आसान है। आप वहां अपनी पृष्ठभूमि जोड़ सकते हैं, और यह सुनिश्चित कर लें कि यह किस तरह दिखने जा रहा है और प्रत्येक बार लोड होने पर छवि को संशोधित करने वाली शक्ति को संसाधित करने के लिए इसका उपयोग नहीं किया जाता है।

यदि आपके पास छवि पर नियंत्रण नहीं है, तो आप इसे Bitmap को image कहलाते हुए कुछ ऐसा करके संशोधित कर सकते हैं।

Bitmap imageWithBG = Bitmap.createBitmap(image.getWidth(), image.getHeight(),image.getConfig()); // Create another image the same size 
imageWithBG.eraseColor(Color.WHITE); // set its background to white, or whatever color you want 
Canvas canvas = new Canvas(imageWithBG); // create a canvas to draw on the new image 
canvas.drawBitmap(image, 0f, 0f, null); // draw old image on the background 
image.recycle(); // clear out old image 
+0

धन्यवाद #ffffff जगह ले सकता है के रूप में काम किया है! – ccbunney

5

आप कर सकते हैं प्रत्येक पिक्सेल के माध्यम से लूप और अगर यह पारदर्शी है की जाँच करें।

ऐसा कुछ। (Untested)

 Bitmap b = ...; 
     for(int x = 0; x<b.getWidth(); x++){ 
      for(int y = 0; y<b.getHeight(); y++){ 
       if(b.getPixel(x, y) == Color.TRANSPARENT){ 
        b.setPixel(x, y, Color.WHITE); 
       } 
      } 
     } 
+2

यदि आप इस रणनीति के साथ जा रहे हैं, तो 'getPixel' का उपयोग न करें। किसी भी समय जब आप 'बिटमैप' में प्रत्येक पिक्सेल के माध्यम से पुन: प्रयास करते हैं तो आपको ['getPixels'] (http://developer.android.com/reference/android/graphics/Bitmap.html#getPixels%28int [],% 20int का पक्ष लेना चाहिए, % 20int,% 20int,% 20int,% 20int,% 20int% 29) इसके बजाए। – kabuko

+1

@MrZander - मैंने इस विधि की कोशिश की और यह काम नहीं किया। डीबग स्टेटमेंट जोड़ना दिखाता है कि यह ट्रांसपेरेंट पिक्सेल ढूंढ रहा था, लेकिन उन्हें व्हाइट (या लाल या किसी अन्य रंग) पर सेट करना प्रभाव नहीं पड़ा है। छवि अभी भी पारदर्शिता प्रतीत होता है .... अजीब ??? – ccbunney

+0

@ कर्नोबुननी शायद क्योंकि आपका बिटमैप म्यूटेबल नहीं है। 'बिटमैप बी = yourbitmap.copy (Bitmap.Config.ARGB_8888, सत्य) 'करने और छवि के रूप में नया बिटमैप सेट करने का प्रयास करें। साथ ही, यह विधि अनचाहे है और मुझे नहीं पता कि यह सबसे प्रभावी तरीका है या नहीं। @ कबुको में एक बिंदु हो सकता है। – MrZander

संबंधित मुद्दे