Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将透明GIF保存在GDI+;或WPF_C#_Wpf_Transparency_Gdi+_Gif - Fatal编程技术网

C# 将透明GIF保存在GDI+;或WPF

C# 将透明GIF保存在GDI+;或WPF,c#,wpf,transparency,gdi+,gif,C#,Wpf,Transparency,Gdi+,Gif,我试图在GDI+中保存一个透明的GIF,但它似乎重用了颜色表中的第一种颜色-这是GDI的一个错误吗 即使我手动设置颜色并将gif重新保存为gif,我也无法让它将透明gif输出到文件: Bitmap b = new Bitmap("c:\\temp\\source.gif"); Bitmap canvas = new Bitmap(b.Width, b.Height); Graphics g = Graphics.FromImage(canvas); g.Clear(Color.Transpa

我试图在GDI+中保存一个透明的GIF,但它似乎重用了颜色表中的第一种颜色-这是GDI的一个错误吗

即使我手动设置颜色并将gif重新保存为gif,我也无法让它将透明gif输出到文件:

Bitmap b = new Bitmap("c:\\temp\\source.gif");

Bitmap canvas = new Bitmap(b.Width, b.Height);

Graphics g = Graphics.FromImage(canvas);
g.Clear(Color.Transparent);

// Draw image
g.DrawImage(b, 0, 0);

canvas.MakeTransparent(Color.Black);
canvas.Save("c:\\temp\\output.gif", System.Drawing.Imaging.ImageFormat.Gif); 
在输出图像中,黑色永远不会设置为透明度颜色


或者,在WPF中有没有这样做的方法?

我建议您看看这个图像处理库ImageMagick

然后使用此命令将保存的gif转换为具有透明背景的gif

convert orig.gif -transparent black transp.gif

这可能不会产生完美的结果,但值得一试。如果不想通过运行控制台命令来实现这一点,您可能还想看看ImageMagick的.NET包装器。

我建议您看看这个图像处理库ImageMagick

然后使用此命令将保存的gif转换为具有透明背景的gif

convert orig.gif -transparent black transp.gif

这可能不会产生完美的结果,但值得一试。如果不想通过运行控制台命令来实现这一点,您可能还想看看ImageMagick的.NET包装器。

这只是一种笨拙的旧图像格式,附带了太多专利问题。微软选择为它提供糟糕的支持:)对于这样的代码,仍然使用它是没有意义的。请改用PNG。如果问题出在GIF部分本身,那么下面是一个例子。额外好处:直接链接到Thank已经看到了这一点,但这只会在C#中重新加载时修复图像,我实际上需要GDI+的“符合标准”输出,这样我就可以在另一个程序中透明地查看GIF,或者确认GDI+无法做到这一点。我需要的“修复”是图像保存,而不是图像加载。它只是一种笨拙的旧图像格式,附带了太多的专利问题。微软选择为它提供糟糕的支持:)对于这样的代码,仍然使用它是没有意义的。请改用PNG。如果问题出在GIF部分本身,那么下面是一个例子。额外好处:直接链接到Thank已经看到了这一点,但这只会在C#中重新加载时修复图像,我实际上需要GDI+的“符合标准”输出,这样我就可以在另一个程序中透明地查看GIF,或者确认GDI+无法做到这一点。我需要的“修复”将在图像保存上,而不是图像加载上。