2012-12-21 15 views
7

के साथ उन्नत रंग मिश्रण विंडोज़ फॉर्म के साथ जीडीआई + का उपयोग करके, मैं गंतव्य पिक्सेल रंग के आधार पर कलम और मिश्रण रंग के साथ आकर्षित करने में सक्षम होना चाहता हूं।जीडीआई +

उदाहरण के लिए, यदि मैं एक रेखा खींचता हूं और यह काले पिक्सल से गुजरता है, तो मैं चाहता हूं कि यह हल्का रंग हो (उदाहरण के लिए सफेद जैसा) ताकि यह दिखाई दे। जब वह वही रेखा सफेद पिक्सेल से गुज़रती है, तो यह एक गहरा रंग होना चाहिए (उदाहरण के लिए काला) ताकि यह अभी भी स्पष्ट रूप से दिखाई दे।

क्या GDI + के साथ ऐसा करने का कोई तरीका है?

+0

यह होने वाला है मुश्किल। आप एक ImageAttributes के साथ एक बनावट ब्रश बना सकते हैं जो इस प्रभाव को प्राप्त करने के लिए विशेष रूप से तैयार किए गए ColorMatrix का उपयोग करता है। एक रंगमेट्रिक्स चुनना जो अवांछित रंग शिफ्ट का उत्पादन नहीं करता है वह मुश्किल हो जाएगा। –

+0

@ हंस: मैंने इसे कलरमैट्रिक्स के साथ काम किया है, लेकिन मुझे नहीं पता कि मैं किस प्रकार का रंगमैट्रिक्स का उपयोग कर सकता हूं जो मैं चाहता हूं। क्या ColorMatrix बस उस छवि में रंगों को अलग नहीं करता है जिसे मैं ब्रश के साथ चित्रित कर रहा हूं? मुझे पृष्ठभूमि छवि के आधार पर रंगों को अलग करने की आवश्यकता है जिसे मैंने पहले से ही ग्राफिक्स संदर्भ के साथ खींचा है। –

उत्तर

3

हंस Passant प्रस्तावित रूप में, आप का उपयोग कर क्या एक बनावट ब्रश के लिए छवि के रूप में कैनवास में वर्तमान में पेंट कर सकते हैं (आप डबल बफरिंग की आवश्यकता हो सकती है कि सही ढंग से काम करने के लिए) और एक ColorMatrix का उपयोग रंग को संशोधित करने के कैनवास पर चित्रित किया जा रहा ।

एक रंग मैट्रिक्स है जो एक्सओआर के समान रंगों को बदल देता है, समस्या यह है कि यह मध्यम ग्रे के साथ काम नहीं करेगा। एक रंग मैट्रिक्स कि आरजीबी उलट और अल्फा बरकरार छोड़ देता होगा:

-1, 0, 0, 0, 0 
0,-1, 0, 0, 0 
0, 0,-1, 0, 0 
0, 0, 0, 1, 0 
1, 1, 1, 0, 1 

कुछ इसी तरह, धीमी यद्यपि एक छवि और प्रक्रिया है कि नियमों के साथ प्रति पिक्सल छवि पिक्सेल जैसे कि अगर रंग चमकीला है करने के लिए कैनवास कॉपी करने के लिए किया जाएगा 0.5 से अधिक, इसे थोड़ा गहरा बनाओ, इसे थोड़ा हल्का बनाओ। फिर, आप उस संसाधित छवि के साथ बनावट ब्रश के रूप में पेंट करते हैं। इससे बेहतर परिणाम मिलेगा लेकिन यह ColorMatrix का उपयोग करने से काफी धीमा होगा।

+0

तो आप मेरे दृश्य को एक छवि बफर में खींचने के लिए कह रहे हैं, फिर उस छवि का उपयोग एक बनावट ब्रश के साथ ब्रश के रूप में करें जो मुझे इच्छित लाइनों को आकर्षित करने के लिए उपयोग किया जाता है। फिर रंगों को घुमाने के लिए ब्रश पर कलरमैट्रिक्स का उपयोग करें। लेकिन फिर यदि मध्य ग्रे के पास कोई रंग हैं तो वे दिखाई नहीं देंगे? –

+0

निश्चित रूप से। या आप दूसरे समाधान को धीमा कर सकते हैं जो धीमा है लेकिन आपको अधिक नियंत्रण देता है। – Coincoin

1

आप कलम रंग को एक्सोरिंग करने का प्रयास कर सकते हैं। पेंट.नेट इसे किसी भी रंग पर दिखाई देने के लिए चयन सीमा के साथ करता है।

+0

क्या आपको कोई विचार है कि वे इसे कैसे पूरा करते हैं? मेरे पास वास्तव में पेंट.नेट के पुराने संस्करण के लिए स्रोत कोड है और यह नए संस्करण के समान नहीं किया गया है। कोड में मैंने दो पेन, एक सफेद और एक काला कलम का उपयोग किया है, और एक वैकल्पिक डैश रंग बनाने के लिए उन्हें अलग-अलग ऑफसेट के साथ एक ही डैश पैटर्न के साथ खींचता है। –

+0

क्षमा करें, कोई विचार नहीं। अपने ब्लॉग पर, वे इसे संदर्भ-संवेदनशील एक्सओआर स्टिपल पैटर्न कहते हैं। –

0

ओह, मुझे नहीं लगता कि यह बहुत मुश्किल है। आप एक पेन बना सकते हैं जो कहीं भी रंगों के आधार पर स्वचालित रूप से रंग बदलता है। बस पिक्सेल को पढ़ें जहां कलम का स्थान है (उदाहरण देखें), अल्फा घटक प्राप्त करें और कलम रंग को काला या सफेद पर सेट करें यदि यह क्रमशः 255/2 से कम या उससे कम है :)

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