Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
673 views
in Technique[技术] by (71.8m points)

c# - Replacing transparent background with white color in PNG images

I have a PNG image being sent from a DrawingView in Android to a WCF service. The image is sent as a 32-bit and it has transparent background. I want to replace the transparent colour (for lack of a better word) background with white. So far my code looks like this:

// 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);

The above works fine, except the images have transparent background. I noticed that in Paint.NET you can simply set the PNG format to 8-bit and it sets the background to white. However, when I tried using:

System.Drawing.Imaging.PixelFormat.Format8bppIndexed

all I got was a completely black picture.

Q: How to replace the transparent background with white in a png?

PS. The image is in Gray Scale.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

This will draw onto a given color:

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;
}

This makes use of the G.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceOver;, which is the default. It blends the drawn image with the background according to the alpha channel of the drawn image.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...