C#如何给一张png透明图片的背景填充为白色 50
您好,软糖来回答罗。
解决方案1: 获取透明区域后,往这个区域绘制白色。
========================================
Graphics g = Graphics.FromImage(Bitmap1);
g.DrawPath(Pens.White, 透明路线);
===============================================
/// <summary>返回Region,表示由 透明路线() 新建的区域</summary>
public Region 透明区域(Bitmap M位图) { return new Region(透明路线(M位图)); }
/// <summary>返回 [<see cref="GraphicsPath"/>] ,表示所有透明的点组成的路线</summary>
public GraphicsPath 透明路线(Bitmap M位图) {
GraphicsPath gp = new GraphicsPath(); //新建图像路径来存储透明的点
for (int x = 0; x < 源宽; x++) {
for (int y = 0; y < 源高; y++) {
Color c = M位图.GetPixel(x, y);
if (c.A == 0) { gp.AddRectangle(new Rectangle(x, y, 1, 1)); } //添加点到路径
}
}
return gp; //返回路径
}
===============================================
解决方案2:可以先转化为Bmp格式,逐像素填充白色后再转化回来。
===============================================
/// <summary>
/// 将此 <see cref="Bitmap"/> 内所有原颜色替换为新颜色
/// <para>如果含有索引的图片格式(例如png),将先转化为32位Bmp进行颜色替换后再转换回来,可能会较慢。</para>
/// </summary>
public void 替换颜色(Bitmap M位图, Color 原颜色, Color 新颜色) {
Bitmap bmp;
if (M位图.PixelFormat.HasFlag(PixelFormat.Indexed)) {
bmp = new Bitmap(M位图.Width, M位图.Height, PixelFormat.Format32bppRgb);
using (var gr = Graphics.FromImage(bmp)) {
gr.DrawImage(M位图, new Rectangle(0, 0, M位图.Width, M位图.Height));
}
int argb值 = 原颜色.ToArgb();
for (int x = 0; x < 源宽; x++) {
for (int y = 0; y < 源高; y++) {
Color c = M位图.GetPixel(x, y);
if (c.ToArgb() == argb值) { M位图.SetPixel(x, y, 新颜色); }
}
}
using (var gr = Graphics.FromImage(M位图)) {
gr.DrawImage(bmp, new Rectangle(0, 0, M位图.Width, M位图.Height));
}
} else {
int argb值 = 原颜色.ToArgb();
for (int x = 0; x < 源宽; x++) {
for (int y = 0; y < 源高; y++) {
Color c = M位图.GetPixel(x, y);
if (c.ToArgb() == argb值) { M位图.SetPixel(x, y, 新颜色); }
}
}
}
}
广告 您可能关注的内容 |