2010-08-26 8 views
19

original question के अनुसार, अंतिम परिणाम एक गोलाकार-रेक्ट pngImageView में एक प्राकृतिक दिखने वाली ड्रॉप छाया के साथ है।एंड्रॉइड के ड्रॉ बिटमैप को केवल काले छवियों को चित्रित करने से कैसे रोकें?

मेरे पास छाया काम कर रही है, लेकिन जब यह खींचती है, तो यह पूरी छवि को काला बनाती है।

alt text

मैं काले होने जब छाया जोड़ने से मूल छवि (निश्चित रूप से नहीं काला) कैसे रोक सकते हैं?

BlurMaskFilter blurFilter = new BlurMaskFilter(2, BlurMaskFilter.Blur.OUTER); 
    Paint shadowPaint = new Paint(); 
    shadowPaint.setMaskFilter(blurFilter); 

    int[] offsetXY = new int[2]; 
    Bitmap originalBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pier_t); 
    Bitmap shadowImage = originalBitmap.extractAlpha(shadowPaint, offsetXY); 

    Canvas c = new Canvas(shadowImage); 
    c.drawBitmap(originalBitmap, -offsetXY[0], -offsetXY[1], null); 

    imageView.setImageBitmap(shadowImage); 





अद्यतन:

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

BlurMaskFilter blurFilter = new BlurMaskFilter(2, BlurMaskFilter.Blur.OUTER); 
Paint shadowPaint = new Paint(); 
shadowPaint.setMaskFilter(blurFilter); 

int[] offsetXY = new int[2]; 
Bitmap originalBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pier_t); 
Bitmap shadowImage = originalBitmap.extractAlpha(shadowPaint, offsetXY); 
Bitmap shadowImage32 = shadowImage.copy(Bitmap.Config.ARGB_8888, true); 

Canvas c = new Canvas(shadowImage32); 
c.drawBitmap(originalBitmap, -offsetXY[0], -offsetXY[1], null); 

imageView.setImageBitmap(shadowImage32); 

alt text

+0

बहुत बढ़िया! मुझे खुशी है कि सभी प्रयासों का भुगतान किया गया। – Josh

+0

छाया के रंग को बदलने के लिए मुझे क्या करना है? – Frame91

उत्तर

12

मैंने आपके अंतिम प्रश्न में टिप्पणी की, लेकिन यहां यह फिर से है।

समस्या यह हो सकती है कि आप 32-बिट छवि (मूल) को 8-बिट छवि (निकाली गई छाया छवि) पर चित्रित कर रहे हैं। अगर ऐसी बात है, की तरह

Bitmap shadowImage32 = shadowImage.copy(ARGB_8888, true); 

extractAlpha कॉल के बाद कुछ करना है, और उस पुरुष 8 बिट shadowImage के बजाय पर आकर्षित।

3

आप दोनों छाया छवि और मूल छवि आकर्षित करने के लिए किया है। छाया छवि में केवल मूल छवि के अल्फा मान होते हैं, न कि वास्तविक रंगीन पिक्सल।

+0

क्या यह c.drawBitmap लाइन पर नहीं हो रहा है? मैंने सोचा कि मैं मूल छवि के साथ कैनवास पर मूल बिटमैप खींच रहा हूं। क्या आप कोड के साथ स्पष्टीकरण दे सकते हैं? – coneybeare

+3

नहीं वह नहीं कर सकता। डेवलपर की क्या ज़रूरत होगी इसके बारे में वास्तव में देखभाल करने के लिए वह 1 लाइन के उत्तर लिखने और एंड्रॉइड को तोड़ने में बहुत व्यस्त है। – StackOverflowed

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