C#中保存Gif文件设置透明无效果

发布时间:2025-12-09 13:48:55 浏览次数:4

在C#中使用Graphics.Clear(Color.Transparent)生成gif格式透明文件时,设置透明不起作用。使用Bitmap.MakeTransparent 方法同样也不能使gif文件透明。这两个问题也是微软的设计使然,和gif文件格式有关系。

如果要在c#中编程实现透明色,必须另写代码,下面是一位老外的代码

///

<summary>


///
Maketheimagetransparent.

///
Theinputisthecolorwhichyouwanttomaketransparent.

///

</summary>


///

<paramname=”color”>
Thecolortomaketransparent.
</param>


///

<paramname=”bitmap”>
Thebitmaptomaketransparent.
</param>


///

<returns>
Newmemorystreamcontainingtransparentbackgroundgif.
</returns>


public
BitmapMakeTransparentGif(Bitmapbitmap,Colorcolor)
{


byte
R
=
color.R;

byte
G
=
color.G;

byte
B
=
color.B;

MemoryStreamfin
=

new
MemoryStream();
bitmap.Save(fin,System.Drawing.Imaging.ImageFormat.Gif);

MemoryStreamfout
=

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);
}

在生成图片之后调用此方法,即可使gif显示透明色。

需要做网站?需要网络推广?欢迎咨询客户经理 13272073477