2011-02-06 12 views
6

सिस्टम। ड्रॉइंग.ग्राफिक्स क्लास में दो विकल्प के साथ कंपोज़िशन मोड है: सोर्सओवर (जो अल्फा घटक पर आधारित है, जो पृष्ठभूमि पहले से मौजूद है, जो मिश्रित है) या स्रोतकॉपी जो पृष्ठभूमि को ओवरराइट करता है जो भी खींचा जा रहा है।डब्ल्यूपीएफ में अल्फा ब्लेंड मोड बदलें?

क्या WPF में कुछ समान है?

डब्ल्यूपीएफ में जब मैं पॉलीलाइन खींचता हूं उदाहरण के लिए उदाहरण के लिए नई पॉलीलाइन हमेशा पृष्ठभूमि के साथ जोड़ती है। मुझे लगता है कि इस्तेमाल किए जाने वाले कंटेनर से स्वतंत्र है। मैं एक कैनवास का उपयोग कर रहा हूं लेकिन कहीं भी मिश्रण मोड संपत्ति नहीं ढूंढ सका। मैं जो करना चाहता हूं वह उपरोक्त वर्णित SourceCopy compositionmode है। अर्थात। नई पॉलीलाइन को कैनवास पर पहले से जो भी हो, उसे ओवरराइट करना चाहिए।

क्या ऐसा करने का एक आसान तरीका है, पिक्सेल शेडर्स का उपयोग करने से कम (जो - जहां तक ​​मैं समझता हूं - वैसे भी काम नहीं करेगा क्योंकि मेरे पास कैनवास बैकबफर तक पहुंच नहीं है)।

मैं कैनवास से फंस नहीं गया हूं और ओवरराइट मोड का समर्थन करने वाले किसी भी कंटेनर का उपयोग करने में प्रसन्नता होगी।

वर्तमान में मेरे पास एक लिखने योग्य बिटमैप के आधार पर एक समाधान है जिसके लिए मुझे सिस्टम प्राप्त होता है। ड्रॉइंग। ग्राफिक्स संदर्भ और फिर कंपोज़िशन मोड में हेरफेर करें। यह काम करता है लेकिन चूंकि मेरी खिड़की पूर्णस्क्रीन है कि समाधान के गंभीर प्रदर्शन प्रभाव हैं।

स्पष्टीकरण और उदाहरण: डब्ल्यूपीएफ विंडो पूरी तरह से पारदर्शी है और कैनवास (बैक ग्राउंड रंग (0,0,0,0)) भी है। अब मैं एक रंग के साथ पॉलीलाइन खींचता हूं। फ्रॉमअर्ग (128,128,0,0)। अब मेरे पास अर्द्ध पारदर्शी लाल पॉलीलाइन है। इसके बाद मैं रंग के साथ एक ही पॉलीलाइन तैयार करता हूं। फ्रॉमअर्ग (0,0,0,0)। अल्फा ब्लेंडिंग होने के कारण परिणाम पहले जैसा ही है। हालांकि, मैं चाहता हूं कि लाल पॉलीलाइन दूसरी पॉलीलाइन के साथ मिटा दी गई हो (जो कि ग्राफिक्स क्लास में स्रोतकॉपी मोड है।

उत्तर

0

मुझे लगता है कि आपको बस इतना करना है कि ब्रश का उपयोग किया जाता है भरने/स्ट्रोक PolyLine पूरी तरह से अपारदर्शी अल्फा मान हैं (यानी 255)। तब पृष्ठभूमि में मिश्रित नहीं किया जाना चाहिए।

+1

हां, लेकिन मुझे किसी भी अल्फा मान के साथ पृष्ठभूमि को ओवरराइट करने की आवश्यकता है, यहां तक ​​कि 0. स्पष्टीकरण देखें और उदाहरण मैंने अभी अपने प्रश्न में जोड़ा है। – Harald

0

आप एक कतरन मुखौटा लागू हो सकते हैं, तत्वों से अधिक क्लिप को इस तरह से आप पथ प्रदान कर सकते हैं कि इसके नीचे हैं, लेकिन बहुत से तत्वों को क्लिप करने की आवश्यकता होने के बाद इसे बनाए रखना मुश्किल हो सकता है ...

+0

WritableBitmap का उपयोग कर अपने वर्तमान समाधान में मैं एक क्लिपिंग रेक्ट (AddDirtyRect के माध्यम से) लागू करता हूं। – Harald

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