2014-12-05 5 views
5

मेरे पास एक पीएनजी छवि को एक डब्ल्यूसीएफ सेवा में DrawingView से भेजा जा रहा है। छवि 32-बिट के रूप में भेजी जाती है और इसमें पारदर्शी पृष्ठभूमि होती है। मैं सफेद के साथ पारदर्शी रंग (बेहतर शब्द की कमी के लिए) पृष्ठभूमि को प्रतिस्थापित करना चाहता हूं। अब तक मेरा कोड इस तरह दिखता है:पीएनजी छवियों में सफेद रंग के साथ पारदर्शी पृष्ठभूमि को बदलना

// Converting image to Bitmap object 
Bitmap i = new Bitmap(new MemoryStream(Convert.FromBase64String(image))); 
// The image that is send from the tablet is 1280x692 
// So we need to crop it 
Rectangle cropRect = new Rectangle(640, 0, 640, 692); 
//HERE 
Bitmap target = i.Clone(cropRect, i.PixelFormat); 
target.Save(string.Format("c:\\images\\{0}.png", randomFileName()), 
System.Drawing.Imaging.ImageFormat.Png); 

उपर्युक्त काम ठीक है, छवियों को पारदर्शी पृष्ठभूमि के अलावा। मैंने देखा कि पेंट.नेट में आप बस पीएनजी प्रारूप को 8-बिट पर सेट कर सकते हैं और यह पृष्ठभूमि को सफेद पर सेट करता है। हालांकि, जब मैंने इसका उपयोग करने का प्रयास किया:

System.Drawing.Imaging.PixelFormat.Format8bppIndexed 

मुझे बस एक पूरी तरह से काला तस्वीर मिली।

प्रश्न: पारदर्शी पृष्ठभूमि को पीएनजी में सफेद के साथ कैसे बदलें?

पीएस। छवि ग्रे स्केल में है।

+0

क्या कोई कारण है कि आपने अनुक्रमित प्रारूप का प्रयास क्यों किया? क्या आपने 24 बीपीपी प्रारूपों में से किसी एक की कोशिश की है? –

+0

आपको एक सफेद बिटमैप बनाने और उस पर छवि खींचने में सक्षम होना चाहिए, फिर जो कुछ भी बचाएं .. – TaW

+0

@ निकोशेचरलर हम्म .. मैंने उनमें से अधिकांश की कोशिश की, मुझे नहीं लगता। Format24bppRgb एक ही परिणाम देता है। –

उत्तर

11

इसमें दिए गए रंग पर आकर्षित करेगा:

Bitmap Transparent2Color(Bitmap bmp1, Color target) 
{ 
    Bitmap bmp2 = new Bitmap(bmp1.Width, bmp1.Height); 
    Rectangle rect = new Rectangle(Point.Empty, bmp1.Size); 
    using (Graphics G = Graphics.FromImage(bmp2)) 
    { 
     G.Clear(target); 
     G.DrawImageUnscaledAndClipped(bmp1, rect); 
    } 
    return bmp2; 
} 

यह G.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceOver;, जो डिफ़ॉल्ट है का उपयोग करता है। यह चित्रित छवि के अल्फा चैनल के अनुसार पृष्ठभूमि के साथ खींची गई छवि को मिश्रित करता है।

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

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