-1

我喜欢让白色背景透明。然而,一些白人没有被删除。如何去除其他类似的白色?

我的代码-

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

1 回答 1

1

您可以使用Bitmap.GetPixel()andBitmap.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);

高温高压

于 2013-08-16T14:43:11.697 回答