您的位置:首页 > 其它

使用GDI+绘制Png图像的尴尬

2009-11-27 23:57 337 查看
问题场景:

看了衣志明的WebCast(三)中有使用GDI+绘图部分,跟着写了代码,居然报错了":

“System.Runtime.InteropServices.ExternalException: A generic error occurred in GDI+.”

定位的代码行为:

bmp.Save(Response.OutputStream, ImageFormat.Png);

开发环境:

1、WindowsXP,vs2005,vs2008,vs2010beta2;

2、Windows2003,vs2005,vs2008,vs2010beta2

代码剖析:

需求:建立web应用程序,运行起始页输出一个椭圆。

放置在Page_Load中的代码

出错的代码:

string sIconFileName = Server.MapPath("test.png");
2Bitmap bmp = new Bitmap(200, 60);
3Graphics g = Graphics.FromImage(bmp);
4g.Clear(Color.Transparent);
5g.DrawEllipse(new Pen(new SolidBrush(Color.Blue)), 10, 10, 180, 40);
6Response.ClearContent();
7Response.ContentType = "image/png";
8bmp.Save(sIconFileName, ImageFormat.Png);

原因剖析:

png是个特例。它的解码器需要双向流。所以我们首先需要把流读取到内存流,然后使用输出流写出内存流。

gif的解码器内置了并行机制来处理。

延伸阅读:

http://www.west-wind.com/Weblog/posts/6008.aspx

http://www.evolt.org/article/To_PNG_or_not_to_PNG/22/60134/index.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: