//本文章有www.blue1000.com翻译,原文地址http://codebetter.com/blogs/brendan.tompkins/archive/2004/01/26/6103.aspx
//尊重他人劳动成果,转载请注明出处。
写程序的时候经常用到gdi+,他可以将一幅深色32bpp图像保存为一个gif文件,过程也比较简单。并且在使用CreateThumnailImage方法保存这个gif图片之前,你还可以调整它的尺寸。
常用的代码:
System.Drawing.Bitmapb=newSystem.Drawing.Bitmap(“c://original_image.gif“);
System.Drawing.Imagethmbnail=b.GetThumbnailImage(100,75,null,newIntPtr());
thmbnail.Save(“c://thumnail.gif“,System.Drawing.Imaging.ImageFormat.Gif);
以上代码可以完成gif文件的绘制和保存工作,但是很快你就会发现问题了:生成的thumnail.gif文件的画质远远低于我们的期望值。
效果图片:
如上图所示的低画质粒状图象还需要进行“颜色量子化”处理(palettization)。之所以会出现这种情况,是因为GDI+默认使用256色,而没有考虑图像自身实际的颜色。
之后,我们尝试着建立自己的“调色板”,可是结果更糟糕:)。一个好的“颜色量子化”算法应该考虑在两个像素颗粒之间填充与这两个像素颜色相近的过渡颜色,提供更多可视颜色空间。
这就是“Octree“算法。“Octree“算法允许我们插入自己的算法来量子化我们的图像。
这里有微软的两片文章,或许对我们有帮助:KB319061和OptimizingColorQuantizationforASP.NETImages(微软MorganSkinner著)。MorganSkinner提供了很好的“Octree“算法代码,大家可以下载参考使用。
使用octreequantizer很方便:
system.drawing.bitmapb=newSystem.Drawing.Bitmap(“c://original_image.gif“);
System.Drawing.Imagethmbnail=b.GetThumbnailImage(100,75,null,newIntPtr());
OctreeQuantizerquantizer=newOctreeQuantizer(255,8);
using(Bitmapquantized=quantizer.Quantize(thmbnail))
{
quantized.Save(“c://thumnail.gif“,System.Drawing.Imaging.ImageFormat.Gif);
}
octreequantizergrayquantizer=newGrayscaleQuantizer();
using(Bitmapquantized=grayquantizer.Quantize(thmbnail))
{
quantized.Save(“c://thumnail.gif“,System.Drawing.Imaging.ImageFormat.Gif);
}
效果图片如下(是不是漂亮多了?):
分享到:
相关推荐
非常好的demo和源码,介绍.NET中GDI+关于Brushes的一些高级操作。例如填充等等。
用Visual C++.NET进行GDI+编程 Visual C++.NET GDI+编程基础 VC++ GDI+编程的字体和文本绘制 基于VC.NET的GDI+图像处理
在Visualc#.NET中使用GDI+动态创建可以用鼠标拖拽方式实现移动、缩放等图形属性修改,实现直线、矩形、文本的创建、移动、缩放功能,绘制的图形可以保存成XML文件,并可以加栽已保存XML文件。
Visual Basic.NET GDI+技术教程
超全面的.NET GDI+图形图像编程教程
GDI+中GIF图片的显示.GDI+中GIF图片的显示.
VC.Net 2010 使用GDI+的配置说明
VB.Net GDI+ 应用例子,用GDI+设计显示不同风格的文本形式,一个绘图工具的应用例子
4.2 在GDI+ 中使用钢笔 4.3 使用钢笔进行变形 4.4 使用画笔进行变形 4.5 系统钢笔和系统画笔 4.6 一个真实世界的例子 ——在GDI+ Painter应用程序中添加颜色、钢笔和画笔 总结 第5章 颜色、字体和文本 5.1 ...
asp.net利用gdi+生成验证码,内有一个类文件 和 一个网页
在基于对话框的应用程序中使用GDI+,用Visual C++.NET使用GDI+的一般方法。 创建一个对话框应用程序,使用GDI+在其中绘制一个100*60的矩形,并对其进行着色。 出自:Visual C++数字图像处理技术详解 环境:window7,...
4.2 在GDI+ 中使用钢笔 4.3 使用钢笔进行变形 4.4 使用画笔进行变形 4.5 系统钢笔和系统画笔 4.6 一个真实世界的例子 ——在GDI+ Painter应用程序中添加颜色、钢笔和画笔 总结 第5章 颜色、字体和文本 5.1 ...
.net c# 做的绘图程序代码 绘图..绘图
我们首先介绍一下GDI+的新特性以及其编程方式的改变,然后介绍用Visual C++.net在基于对话框和单文档/多文档等应用程序中使用GDI+的一般方法。 GDI+新特性 GDI+与GDI相比,增加了下列新的特性: 1、渐变...
c#.net采用GDI+技术开发的可以组态的程序源码。 从老外的网站上弄来的,看着实现的功能挺有意思,就发上来了。
visual basic.net gdi+技术教程.rar
使用 GDI+ 显示 GIF 图像,打开工程后先点击“组建”->“全部重建”,再运行。
GDI+画图,事件驱动。 使用方法:右键reset按钮出现菜单。其他跟老版扫雷一样。 特色功能: 首发无雷,自由窗口大小 源码全部送上。自己改着玩吧。
项目为vs c++控制台工程,整合一些资源,encoding_gif接口实现gif编码和decoding_gif实现gif解码,在此分享一下