2011-03-28 19 views
8

मैं एक बिटमैप RenderTargetBitmap उपयोग करने के लिए, एक दृश्य वस्तु है, जो एक पारदर्शी पृष्ठभूमि है को बचाने के लिए कोशिश कर रहा हूँ ...RenderTargetBitmap के आउटपुट के लिए पारदर्शिता रंग कैसे सेट करें?

public static RenderTargetBitmap RenderToBitmap(this Visual Source, int Width, int Height) 
    { 
     var Result = new RenderTargetBitmap(Width, Height, 96, 96, PixelFormats.Default); 

     Result.Render(Source); 
     return Result; 
    } 

यह काम करता है, लेकिन पारदर्शी पिक्सेल काले रंग के साथ गाया जाता है। इन पारदर्शी पिक्सेल को दूसरे रंग में बदलने का सबसे आसान तरीका क्या है?

+0

क्या आप छवि को जेपीजी के रूप में सहेजते हैं? मेरे पास यह व्यवहार एक जेपीईजी और पीएनजी –

+0

के रूप में एक नियामक व्यवहार की बचत के रूप में सहेज रहा था हां, परिणाम एक .JPG फ़ाइल में सहेजा गया है। मुझे लगता है कि उत्पादन सभी प्रारूपों के लिए समान होना चाहिए, इसलिए पारदर्शीता को एक विशिष्ट रंग में बदलने की आवश्यकता है। –

उत्तर

1

यदि आप छवि को जेपीजी के रूप में सहेज रहे हैं, तो पारदर्शी काला दिखाई देगा क्योंकि जेपीजी पारदर्शी चैनल AFAIK का समर्थन नहीं करता है। संभावित समाधान: एक पीएनजी के रूप में सहेजें, या एक उचित पृष्ठभूमि रंग के साथ पेंट।

1

मैंने इसका परीक्षण नहीं किया है, लेकिन सिद्धांत रूप में इसे काम करना चाहिए।

  1. एक सरणी के लिए अपने RenderTargetBitmap से सभी पिक्सेल डेटा निकालने के CopyPixels() विधि का प्रयोग करें।

  2. फिर उन सभी पिक्सल के अल्फा चैनल से पूछें और जहां वे 0x00 (पूरी तरह से पारदर्शी) के बराबर हैं, पृष्ठभूमि में जो भी आप चाहें रंग सेट करें। यदि आप अधिक सुरुचिपूर्ण होना चाहते हैं, तो आपको अर्ध-पारदर्शी पिक्सेल में रंगों को व्यवस्थित करने के लिए "रंग गणित" करना होगा।

  3. अंत में, आपके पास पिक्सेल की एक समायोजित सरणी होने के बाद, उनसे एक नया बिटमैप स्रोत बनाएं।

  4. डिस्क पर सहेजने के लिए, आपको शायद स्मृति में एक छवि बनाना होगा और अपना स्रोत अपने नए बिटमैपसोर्स पर सेट करना होगा और फिर अपने RenderToBitmap को चलाएं।

उम्मीद है कि यह मदद करता है।

संपादित करें: इस पोस्ट करने के बाद, मैं एक और सोचा आसान हो सकता है कि था।

क्या आप बचाने के लिए और यह एक नई में स्मृति पैनल में डाल की कोशिश कर रहे एक क्लोन या दृश्य तत्व की स्नैपशॉट ले तो (जैसे एक ग्रिड या एक कैनवास के रूप में), तो आपको बस को बदल सकता है की पृष्ठभूमि पैनल जो रंग आप चाहते हैं।

फिर आप पैनल को अपने स्रोत के रूप में RenderTargetBitmap के लिए उपयोग करेंगे।

+0

हाय, मैं यूडब्ल्यूपी के साथ जो कहा है, मैं कोशिश कर रहा हूं, लेकिन मुझे एक काला पृष्ठभूमि मिलती है। ऐसा क्यों है? – gayan1991

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