C#中保存Gif文件设置透明无效果
生活随笔
收集整理的這篇文章主要介紹了
C#中保存Gif文件设置透明无效果
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?
在C#中使用Graphics.Clear(Color.Transparent)生成gif格式透明文件時(shí),設(shè)置透明不起作用。使用Bitmap.MakeTransparent 方法同樣也不能使gif文件透明。這兩個(gè)問(wèn)題也是微軟的設(shè)計(jì)使然,和gif文件格式有關(guān)系。
如果要在c#中編程實(shí)現(xiàn)透明色,必須另寫(xiě)代碼,下面是一位老外的代碼
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->///?<summary>
///?Make?the?image?transparent.?
///?The?input?is?the?color?which?you?want?to?make?transparent.
///?</summary>
///?<param?name="color">The?color?to?make?transparent.</param>
///?<param?name="bitmap">The?bitmap?to?make?transparent.</param>
///?<returns>New?memory?stream?containing?transparent?background?gif.</returns>
public?Bitmap?MakeTransparentGif(Bitmap?bitmap,?Color?color)
{
????byte?R?=?color.R;
????byte?G?=?color.G;
????byte?B?=?color.B;
????MemoryStream?fin?=?new?MemoryStream();
????bitmap.Save(fin,?System.Drawing.Imaging.ImageFormat.Gif);
????MemoryStream?fout?=?new?MemoryStream((int)fin.Length);
????int?count?=?0;
????byte[]?buf?=?new?byte[256];
????byte?transparentIdx?=?0;
????fin.Seek(0,?SeekOrigin.Begin);
????//header
????count?=?fin.Read(buf,?0,?13);
????if?((buf[0]?!=?71)?||?(buf[1]?!=?73)?||?(buf[2]?!=?70))?return?null;?//GIF
????fout.Write(buf,?0,?13);
????int?i?=?0;
????if?((buf[10]?&?0x80)?>?0)
????{
????????i?=?1?<<?((buf[10]?&?7)?+?1)?==?256???256?:?0;
????}
????for?(;?i?!=?0;?i--)
????{
????????fin.Read(buf,?0,?3);
????????if?((buf[0]?==?R)?&&?(buf[1]?==?G)?&&?(buf[2]?==?B))
????????{
????????????transparentIdx?=?(byte)(256?-?i);
????????}
????????fout.Write(buf,?0,?3);
????}
????bool?gcePresent?=?false;
????while?(true)
????{
????????fin.Read(buf,?0,?1);
????????fout.Write(buf,?0,?1);
????????if?(buf[0]?!=?0x21)?break;
????????fin.Read(buf,?0,?1);
????????fout.Write(buf,?0,?1);
????????gcePresent?=?(buf[0]?==?0xf9);
????????while?(true)
????????{
????????????fin.Read(buf,?0,?1);
????????????fout.Write(buf,?0,?1);
????????????if?(buf[0]?==?0)?break;
????????????count?=?buf[0];
????????????if?(fin.Read(buf,?0,?count)?!=?count)?return?null;
????????????if?(gcePresent)
????????????{
????????????????if?(count?==?4)
????????????????{
????????????????????buf[0]?|=?0x01;
????????????????????buf[3]?=?transparentIdx;
????????????????}
????????????}
????????????fout.Write(buf,?0,?count);
????????}
????}
????while?(count?>?0)
????{
????????count?=?fin.Read(buf,?0,?1);
????????fout.Write(buf,?0,?1);
????}
????fin.Close();
????fout.Flush();
????return?new?Bitmap(fout);
}
在生成圖片之后調(diào)用此方法,即可使gif顯示透明色。
-------------------------------------------------------------
***系統(tǒng)(DianCMS) 1.0 盛大發(fā)布
http://www.diancms.com
轉(zhuǎn)載于:https://www.cnblogs.com/grassland619/archive/2009/06/20/1507284.html
總結(jié)
以上是生活随笔為你收集整理的C#中保存Gif文件设置透明无效果的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: spring.net 注入 配置
- 下一篇: 电脑使用怎么安装win7系统还原 Win