2010-10-28 9 views
12

मेरे पास एक सिंगल-चैनल पीएनजी फ़ाइल है जिसे मैं पोर्टर-डफ ड्राइंग ऑपरेशंस के लिए अल्फा मास्क के रूप में उपयोग करना चाहता हूं। यदि मैं इसे बिना किसी विकल्प के लोड करता हूं, परिणामी बिटमैप में एक RGB_565 कॉन्फ़िगरेशन है, यानी ग्रेस्केल के रूप में माना जाता है। अगर मैं पसंदीदा कॉन्फ़िगरेशन को ALPHA_8 पर सेट करता हूं, तो यह इसे एक ग्रेस्केल ARGB_8888 के रूप में लोड करता है।एंड्रॉइड: अल्फा मास्क बिटमैप लोड करना

मैं इस फ़ाइल को ग्रेस्केल छवि के बजाय अल्फा मास्क के रूप में देखने के लिए एंड्रॉइड को कैसे समझा सकता हूं? अब मैं आरजीबी चैनल सभी शून्यों के साथ एक RGBA PNG फ़ाइल में अल्फ़ा चैनल शामिल कर रहा हूँ

: एक समाधान की तुलना में एक वैकल्पिक हल के

mask1 = BitmapFactory.decodeStream(pngStream); 
// mask1.getConfig() is now RGB_565 

BitmapFactory.Options maskOpts = new BitmapFactory.Options(); 
maskOpts.inPreferredConfig = Bitmap.Config.ALPHA_8; 
mask2 = BitmapFactory.decodeStream(pngStream, null, maskOpts); 
// mask2.getConfig() is now ARGB_8888 (the alpha channel is fully opaque) 
+0

क्या होता है जब आप पसंदीदा कॉन्फ़िगरेशन ARGB_8888 पर सेट करते हैं? – EboMike

+0

ALPHA_8 के समान परिणाम। मुझे एक अपारदर्शी अल्फा चैनल के साथ एक ARGB_8888 बिटमैप मिलता है। – kvance

+0

आपका पीएनजी किस रंग का प्रकार है? मैं 0 अनुमान लगा रहा हूं, जो ग्रेस्केल है। जहां तक ​​मुझे पता है कि वहां कोई "अल्फा केवल" पीएनजी फ़ाइल नहीं है। फ़ाइल आकार के लिए आप निकटतम सूचकांक के पहचान मानचित्र के साथ 8 बिट पैलेट प्राप्त कर सकते हैं। लेकिन शायद इसके लायक नहीं है। नीचे आपका कामकाज शायद आपको मिलेगा सबसे अच्छा है। लेकिन मुझे वह लड़का होने से नफरत है: एपीआई आपको कुछ बताने की कोशिश कर रहा है! अल्फा और आरजीबी को एक साथ रखें। हमेशा। यह तेजी से और बेहतर समर्थित होने जा रहा है। ALPHA_8 का उपयोग करके आप अच्छा रास्ता छोड़ देते हैं। यदि संभव हो तो अपने डिजाइन को आरजीबीए में बदलने की कोशिश करें। – starmole

उत्तर

5

अधिक। मैं इस फ़ाइल को ARGB_8888 की पसंदीदा कॉन्फ़िगरेशन के साथ लोड कर सकता हूं और उसके बाद अपना अल्फा चैनल निकाल सकता हूं। यह मुखौटा फ़ाइल में कुछ केबी को बर्बाद करता है, और छवि को डीकोड करते समय बहुत सारी स्मृति।

BitmapFactory.Options opts = new BitmapFactory.Options(); 
opts.inPreferredConfig = Bitmap.Config.ARGB_8888; 
Bitmap source = BitmapFactory.decodeStream(pngStream, null, opts); 
Bitmap mask = source.extractAlpha(); 
source.recycle(); 
// mask.getConfig() is now ALPHA_8 
+0

क्या आपको कभी बेहतर समाधान मिला? मैं इसी समस्या में भाग रहा हूं। – Tenfour04

+0

@ TenFour04 दुर्भाग्य से कभी नहीं किया। – kvance

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