如何使图像背景透明,可以调整模糊因子?

时间:2013-08-16 14:11:44

标签: c# image

我喜欢让白色背景透明。但是有些白人不会被移除。如何删除其他类似的白色?

我的代码 -

string currentPath = Environment.CurrentDirectory;
int width = pictureBox1.Width;
int height = pictureBox1.Height;
Bitmap bm = new Bitmap(width, height);
pictureBox1.DrawToBitmap(bm, new System.Drawing.Rectangle(0, 0, width, height));

bm.MakeTransparent(System.Drawing.Color.White);
System.Drawing.Image img = (System.Drawing.Image)bm;
img.Save(currentPath + "\\temp\\logo.png", ImageFormat.Png); 

1 个答案:

答案 0 :(得分:1)

您可以使用Bitmap.GetPixel()Bitmap.SetPixel()使非白色透明。例如:

for (int x = 0; x < bm.Width; x++) 
{
    for (int y = 0; y < bm.Height; y++) 
    {
        Color c = bm.GetPixel(x, y);
        if ((c.B + c.R + c.G > 660))
            c = Color.FromArgb(0, c.R, c.G, c.B);
        bm.SetPixel(x, y, c);
    }
}

这将循环遍历位图中的每个像素,并将所有稍微偏白的颜色'Alpha设置为0,这将使该像素透明。您可以更改Pixel的R,G和B值必须加起来并使其更高以使像素必须更白,或者使该值更低,这将使更多的灰白像素变得透明。不确定这段代码的效率如何,但希望它会有所帮助。您也可以使用bitmap.GetBrightness而不是if ((c.B + c.R + c.G > 660)) c = Color.FromArgb(0, c.R, c.G, c.B);来尝试类似if (c.GetBrightness() > 240) c = Color.FromArgb(0, c.R, c.G, c.B);

的内容

HTH