我有一个图像(徽标),我想通过它作为一个参数,使背景透明,然后保存它。
我怎样才能做到这一点?
我试过了:
public string SaveImage(Bitmap bmp,string SavePath,string Name)
{
string path = "";
var format = ImageFormat.Jpeg;
using (var m = new MemoryStream())
{
bmp.Save(m, format);
var img = System.Drawing.Image.FromStream(m);
using (var g = Graphics.FromImage(img)) // This is what I've used for making the background transparent
{
g.Clear(System.Drawing.Color.Transparent);
g.Save();
}
var ImgPath = Path.Combine(SavePath, Path.ChangeExtension(Name,"png"));
img.Save(ImgPath);
path = ImgPath;
}
return path;
}
测试此功能后,我得到一个黑色图像作为输出(保存图像)
2条答案
按热度按时间z5btuh9x1#
代码的一些注解:
System.Drawing
类型 Package 本机GDI+组件,而不是WPF。Bitmap
,但JPEG编码器不支持透明,即使徽标具有透明背景,JPEG编码器也会将其删除可能的解决办法:
MakeTransparent
方法代替Clear
。它将替换单色,因此无法恢复可能的抗锯齿Alpha混合。它还将转换像素格式,以便也可以在重新加载的JPEG上使用。WriteableBitmap
上使用GetReadWriteBitmapData
扩展方法来访问与上面相同的MakeTransparent
功能沿着某种other features。但是,如果您知道如何分离混合颜色,则要恢复良好的抗锯齿alpha背景,您可能需要使用TransformColors
方法。tktrz96b2#
通过下面的代码更改背景颜色