使用透明图像保存PictureBox中的非透明图像

时间:2012-03-07 15:58:55

标签: c# transparency

我有一个PictureBox,其中有很多透明的png被绘制成......

现在我想将此PictureBox的内容保存到文件中,但没有透明度。

我该怎么做?

我已经尝试过像这样删除Image中的透明度,但是它不起作用,保存后我仍然有一个透明的图像。

...

removeTransparency(pictureBox.Image).Save(saveFileDialog.FileName);

private Bitmap removeTransparency(Image transparentImage)
{
    Bitmap src = new Bitmap(transparentImage);
    Bitmap newImage = new Bitmap(src.Size.Width, src.Size.Height);
    Graphics g = Graphics.FromImage(newImage);
    g.DrawRectangle(new Pen(new SolidBrush(Color.White)), 0, 0, newImage.Width, newImage.Height);
    g.DrawImage(src, 0, 0);

    return newImage;
}

1 个答案:

答案 0 :(得分:1)

您可以循环浏览所有像素(请不要使用GetPixel / SetPixel)来更改颜色,也可以创建另一个相同大小的位图,从图像创建图形上下文,用您喜欢的背景颜色清除图像然后在上面绘制图像(因此透明像素将被背景颜色替换)。

实施例

你做过这样的事吗?

public static Bitmap Repaint(Bitmap source, Color backgroundColor)
{
 Bitmap result = new Bitmap(source.Width, source.Height, PixelFormat.Format32bppArgb);
 using (Graphics g = Graphics.FromImage(result))
 {
  g.Clear(backgroundColor);
  g.DrawImage(source, new Rectangle(0, 0, source.Width, source.Height));
 }

 return result;
}