使用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
看了衣志明的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
相关文章推荐
- MFC 使用GDI+ 绘制Png、Jpg等类型图片
- 使用Batik绘制SVG图并保存为png图像格式
- 使用Batik绘制SVG图并保存为png图像格式
- [C#]GDI+中使用BitBlt绘制图像到窗口失败
- 使用GDI+ 绘制可旋转的PNG
- VC下如何使用GDI+进行图像程序设计
- 使用GDI+显示OpenCV中的图像IplImage
- Asp.Net 使用 GDI+ 绘制3D饼图入门篇源码
- Python下opencv使用笔记(二)(简单几何图像绘制)
- C#中使用FreeImage库加载Bmp、JPG、PNG、PCX、TGA、PSD等25种格式的图像(源码)。
- 在C++中使用GDI+绘制带箭头的线,箭头大小可调
- 使用GDI+绘制高质量图和字体
- 使用QT搭建点云显示框架系列五·基于QT的QML图像选点、动态绘制十字丝功能 ,以及纹理映射
- 使用多边形绘制图像(MATLAB)
- 在MFC程序中使用CImage类绘制半透明图像
- 使用GDI+显示OpenCV中的图像IplImage
- 使用GDI+绘制验证码
- VC中使用GDI+实现为按钮加载Png图片
- 使用图像绘制
- 使用Window的DC把OpenCV读入的图像数据绘制出来