原文出处
http://blog.csdn.net/ncjmc/archive/2006/08/28/1132879.aspx

以前在用C#做网站保存缩略图的程序中发现,当保存为GIF文件类型时,原来的透明背景变成了黑色,当时由于赶时间,就统一用白色代替了背景,并用Jpeg格式存储,并没有深究。

  近来在网上查阅了许多资料,看到了两种解决方法:一种是在显示时设置透明背景色,GIF文件本身并不改变,另一种是不推荐使用的调用API的方法。将后一种I的VB源码用C#重写后,发现其中的调色板设置太少,转换效果不理想。

  重新到网上搜索关于调色板的资料,发现MSDN上的一篇《对 ASP.NET 图像的颜色量化(Quantization)进行优化》的文章。

http://www.microsoft.com/china/MSDN/library/archives/library/DNAspp/html/colorquant.asp

  将其中基于调色板量化的代码分离出来,透明背景色的图片保存成功。

完整代码如下:

  1[转]C#中保存GIF文件后透明背景问题的一个解决方法public class GifPalette
  2    }

调用方法:

  先将该类添加到项目中,再在合适的地方调用。例:

        Bitmap bitmap = new System.Drawing.Bitmap(width, height);     // Image类也可
        // ......(图形操作代码)
        WindwoodGif.GifPalette gifPalette = new WindwoodGif.GifPalette();
        bitmap = gifPalette.Quantize(bitmap);
        bitmap.Save(SaveFileName, ImageFormat.Gif);

  经测试,这种方法能够实现GIF文件的透明背景存储,在WinForm、WebForm均能使用。由于使用了标准256色调色板,内存开销可能较大,转换时间相对较慢,图像质量也有一定影响。此外,代码中使用了非安全代码(指针),在编译时项目属性中要设置允许不安全代码。


 

 

相关文章:

  • 2022-12-23
  • 2021-11-17
  • 2021-05-24
  • 2022-03-02
  • 2022-12-23
  • 2021-08-28
  • 2021-08-22
  • 2022-01-18
猜你喜欢
  • 2022-12-23
  • 2021-12-27
  • 2022-01-27
  • 2022-12-23
  • 2021-11-17
  • 2021-08-15
  • 2021-12-12
相关资源
相似解决方案