user487252's solution काम करता है।
मेरे विशेष उपयोग मामले में, मैंने एक पीडीएफ (एपीवी पीडीएफ व्यू के माध्यम से) को एक पिक्सेल सरणी int[]
में एक पृष्ठ प्रस्तुत किया है जिसे मैं Bitmap.createBitmap(int[], int, int, Bitmap.Config)
में पास करने जा रहा हूं। इस पृष्ठ में एक सफेद पृष्ठभूमि पर खींची गई रेखा कला है, और एंटी-एलियासिंग को संरक्षित करते समय मुझे पृष्ठभूमि को हटाने की आवश्यकता है।
मुझे पोर्टर-डफ मोड नहीं मिला जो वास्तव में वही था, इसलिए मैंने पिक्सल के माध्यम से बकलिंग और पुनरावृत्ति समाप्त कर दिया और उन्हें एक-एक करके बदल दिया। परिणाम आश्चर्यजनक रूप से सरल और performant था:
int [] pixels = ...;
for(int i = 0; i < pixels.length; i++) {
// Invert the red channel as an alpha bitmask for the desired color.
pixels[i] = ~(pixels[i] << 8 & 0xFF000000) & Color.BLACK;
}
Bitmap bitmap = Bitmap.createBitmap(pixels, width, height, Bitmap.Config.ARGB_8888);
यह ड्राइंग लाइन कला के लिए एकदम सही है, किसी भी रंग विरोधी aliasing खोने के बिना लाइनों के लिए इस्तेमाल किया जा सकता के बाद से। मैं यहां लाल चैनल का उपयोग कर रहा हूं, लेकिन आप 8
के बजाय 16
बिट्स को स्थानांतरित करके हरे रंग का उपयोग कर सकते हैं, या 24
स्थानांतरित करके नीला कर सकते हैं।
स्रोत
2012-08-20 19:45:43
धन्यवाद, लेकिन मुझे अंत में पता चला कि पोर्टरडफ, एक्सफर्मोड (xor) के साथ इसे कैसे किया जाए, लेकिन अन्य बिटमैप पर लागू किया गया, पहले मैंने मास्क और स्रोत विलय किया और इसे रंगफिल्टर के साथ कैनवास पर खींचने की कोशिश की, लेकिन आखिर में मैंने सोचा आउटपुट पर मास्क ड्रॉइंग करते समय मुझे xfermode का उपयोग करना चाहिए, कैनवास नहीं :) – ZZZ