如何用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外,不能调用其它的图形处理组件。
...全文
1690 31 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
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等
加载更多回复(11)

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧