我喜欢让白色背景透明。但是有些白人不会被移除。如何删除其他类似的白色?
我的代码 -
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);
答案 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