• 全部
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm&WPF
  • C#开发新技术
  • 问答

如何用C#生成透明的GIF图片?

chinahuman 2006-06-16 09:52:54
要求是真正的透明图片,不是假透明
网上找到的方法:
=======================================================
1.在aspx上拉一个HTML的img 然后run at server。同时为了体现透明,把背景色改成不同颜色自己看看效果。


<body MS_POSITIONING="GridLayout" background="images/bt_exit.gif">
<form id="Form1" method="post" runat="server">
<IMG alt="" src="" id="IMG1" style="FILTER: chroma(color:#000000)" runat="server">
如果整个GIF也要半透明可用 style="FILTER:alpha(opacity=50)"
</form>
</body>

2.codebehind的代码

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace dztz
{
///
/// test 的摘要说明。
///
public class test : System.Web.UI.Page
{
protected System.Web.UI.HtmlControls.HtmlImage IMG1;

private void Page_Load(object sender, System.EventArgs e)
{
MyTempImage myTempImage=new MyTempImage();
IMG1.Src=myTempImage.CreateImage();
}

#region Web 窗体设计器生成的代码
..
#endregion
}

public class MyTempImage : Page
{
public string CreateImage()
{
string str=DateTime.Now.ToString();
Bitmap image=new Bitmap(200,30);
Graphics g=Graphics.FromImage(image);
string thefullname=Server.MapPath("/")+"\\nowtime.gif";
g.Clear(Color.Transparent); //这里用不用透明色无所谓的,透明色实际上会是黑色
g.DrawString(str,new Font("Courier New", 10),new
SolidBrush(Color.FromArgb(128, 0, 0, 255)),20,5); //这里采用半透明字体
image.Save(thefullname,System.Drawing.Imaging.ImageFormat.Gif);
return "/nowtime.gif";
}
}
}
==================================================================
这两个办法我证实是无效的
还有一个调用API的方法,我把原来的VB。NET的代码翻译成C#后,发现会有一些颜色会被透明掉。现在我的图片都是纯色的。
要求除了.net framework自带的图形处理组件和API外,不能调用其它的图形处理组件。
...全文
1517 点赞 收藏 31
写回复
31 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
hzaccp3 2010-05-29
string valueStr = "";
int fontsize = 20;
int count = 5;
int fwidth = -2;//字体间的距离
int width = (fontsize + fwidth) * count + 5;
int height = fontsize + 6;

Font f;
Random r = new Random();
string vs = "abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789";
string fs = "宋体,新宋体,仿宋_GB2312,黑体,楷体_GB2312";
Color[] cs = new Color[] { Color.White, Color.White, Color.Yellow };
System.Drawing.Image bitmap = new System.Drawing.Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
//System.Drawing.Image bitmap = new System.Drawing.Bitmap(width, height);//不透明
Graphics graphics = Graphics.FromImage(bitmap);
//graphics.Clear(Color.FromArgb(60, 107, 139));//不透明
graphics.Clear(Color.Transparent);

for (int i = 0; i < count; i++)
{
string cha = vs.Substring(r.Next(vs.Length - 1), 1);
valueStr += cha;
f = new Font(fs.Split(',')[r.Next(fs.Split(',').Length)], fontsize, FontStyle.Bold);
graphics.DrawString(cha, f, new SolidBrush(cs[r.Next(cs.Length)]), new PointF(i * (fontsize + fwidth), 0));
}

Response.ContentType = "Image/png";
bitmap.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Png);
bitmap.Dispose();
Response.End();
回复
wufato 2006-06-20
up
回复
chinahuman 2006-06-20
无论是web,还是windows的,我所要的是可以生成透明的GIF图片。虽然PNG也可以透明,但是IE有个BUG,在显示PNG图片的时候,它的透明部分显示的是淡蓝色,达到不到我要的效果。
Qim(莫名):如果你的程序可以生成透明的GIF图片文件,那不烦给我看看,我可以另开个百分贴给你送上。
回复
chinahuman 2006-06-20
好,我先把这个贴结了,哪天你结果出来了,我再开贴给分。到时候站内消息通知我。
回复
Qim 2006-06-20
我再研究一下。改天回复。
回复
chinahuman 2006-06-20
看来除非自己写GIF生成的控件,不然是没有办法透明了。
回复
chinahuman 2006-06-20
Qim(莫名):你生成的图片事实上是PNG格式的。PNG格式的透明图片在IE下面显示不是透明的。
回复
Qim 2006-06-20

ImageFormat.Png
可以保存成png格式的。图片是透明的。
但是用ImageFormat.Gif,就不行了。此时的Image.PixelFormat成了Format8bppIndexed。这样就不行了。
回复
liuqian0415 2006-06-20
聚合与包含的区别
回复
chinahuman 2006-06-20
还是不行:
Bitmap bmp = new Bitmap(200, 100, PixelFormat.Format32bppArgb);
Font font = new Font("system", 12);
Graphics g = Graphics.FromImage(bmp);
g.DrawString("hello world", font, new SolidBrush(Color.Pink), 10, 10);
bmp.Save(@"D:\2.gif", ImageFormat.Gif);
g.Dispose();
bmp.Dispose();
回复
Qim 2006-06-20
还是把代码贴上吧。(对不住了楼猪,QQ上不去)
Bitmap b = new Bitmap(100, 100, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
b.MakeTransparent();
Graphics g = Graphics.FromImage(b);
g.DrawString("HelloWorld", new Font("黑体", 14), new SolidBrush(Color.Red), 0, 0);
b.Save("bb.gif");
回复
Qim 2006-06-20
Bitmap b = new Bitmap(100, 100, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
b.MakeTransparent();
Graphics g = Graphics.FromImage(b);
g.DrawString("HelloWorld", new Font("黑体", 14), new SolidBrush(Color.Red), 0, 0);
b.Save("bb.gif");
回复
zipo 2006-06-20
帮你顶吧!
回复
Qim 2006-06-20
QQ无法登录现在。晕倒。
生成的gif图片的格式应该为:
PixelFormat=Format32bppArgb
就可以了。猪主试试
回复
chinahuman 2006-06-20
我已经加你的QQ了。
回复
addwing 2006-06-20
帮你顶,接分,留念,学习。。。。。。。。。。
回复
Qim 2006-06-20
楼猪留个联系方式。我QQ:67198780
回复
Reeezak 2006-06-19
Bitmap b = new Bitmap(100,100,PixelFormat.Format32bppPArgb)
这个会是黑色??

难道lz把颜色用成了0xff000000?

用0x88000000看看?

不知道lz是怎么用的

不过我试过之后,似乎没有什么问题啊~~~图片的确是半透明的
回复
chinahuman 2006-06-19
Knight94(愚翁) :CSS的Filter只有IE才能支持,我想要的是基本上在所有的游览器上都支持的效果
Patel2008() :这个只是在绘制窗体的时候才有效,但是保存出来的文件还是不透明的(背景色是黑色)
回复
Qim 2006-06-19
1,请问楼猪是想做WEB,还是WINDWOS?
小弟这里只有一个windows下的。可显示出透明图片。
透时效果很好。并且还可以设置透明度。
2,请问楼猪,如果一个png图片本来透明的,你是想让它在程序中透明的显示,还是想生成一幅透明的图片?如gif,png等
回复
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2006-06-16 09:52
社区公告

让您成为最强悍的C#开发者