使用GDI+提高gif图片的保存画质
2008-02-25 14:00
288 查看
写程序的时候经常用到gdi+,他可以将一幅深色32 bpp图像保存为一个gif文件,过程也比较简单。并且在使用CreateThumnailImage方法保存这个gif图片之前,你还可以调整它的尺寸。
常用的代码:
System.Drawing.Bitmap b = new System.Drawing.Bitmap(“c://original_image.gif“);
System.Drawing.Image thmbnail = b.GetThumbnailImage(100,75,null,new IntPtr());
thmbnail.Save(“c://thumnail.gif“, System.Drawing.Imaging.ImageFormat.Gif);
以上代码可以完成gif文件的绘制和保存工作,但是很快你就会发现问题了:生成的thumnail.gif文件的画质远远低于我们的期望值。
效果图片:
如上图所示的低画质粒状图象还需要进行“颜色量子化”处理(palettization)。之所以会出现这种情况,是因为GDI+默认使用256色,而没有考虑图像自身实际的颜色。
之后,我们尝试着建立自己的“调色板”,可是结果更糟糕:)。一个好的“颜色量子化”算法应该考虑在两个像素颗粒之间填充与这两个像素颜色相近的过渡颜色,提供更多可视颜色空间。
这就是“Octree“ 算法。“Octree“ 算法允许我们插入自己的算法来量子化我们的图像。
这里有微软的两片文章,或许对我们有帮助:KB 319061 和 Optimizing Color Quantization for ASP.NET Images (微软Morgan Skinner著)。Morgan Skinner提供了很好的“Octree“ 算法代码,大家可以下载参考使用。
使用octreequantizer很方便:
system.drawing.bitmap b = new System.Drawing.Bitmap(“c://original_image.gif“);
System.Drawing.Image thmbnail = b.GetThumbnailImage(100,75,null,new IntPtr());
OctreeQuantizer quantizer = new OctreeQuantizer ( 255 , 8 ) ;
using ( Bitmap quantized = quantizer.Quantize ( thmbnail ) )
{
quantized.Save(“c://thumnail.gif“, System.Drawing.Imaging.ImageFormat.Gif);
}
octreequantizer grayquantizer = new GrayscaleQuantizer ( ) ;
using ( Bitmap quantized = grayquantizer.Quantize ( thmbnail ) )
{
quantized.Save(“c://thumnail.gif“, System.Drawing.Imaging.ImageFormat.Gif);
}
效果图片如下(是不是漂亮多了?):
点击这里下载项目代码,修改namespace就可以在你自己的项目中使用它了。
本文来自:http://www.linuxpk.com/48311.html
常用的代码:
System.Drawing.Bitmap b = new System.Drawing.Bitmap(“c://original_image.gif“);
System.Drawing.Image thmbnail = b.GetThumbnailImage(100,75,null,new IntPtr());
thmbnail.Save(“c://thumnail.gif“, System.Drawing.Imaging.ImageFormat.Gif);
以上代码可以完成gif文件的绘制和保存工作,但是很快你就会发现问题了:生成的thumnail.gif文件的画质远远低于我们的期望值。
效果图片:
如上图所示的低画质粒状图象还需要进行“颜色量子化”处理(palettization)。之所以会出现这种情况,是因为GDI+默认使用256色,而没有考虑图像自身实际的颜色。
之后,我们尝试着建立自己的“调色板”,可是结果更糟糕:)。一个好的“颜色量子化”算法应该考虑在两个像素颗粒之间填充与这两个像素颜色相近的过渡颜色,提供更多可视颜色空间。
这就是“Octree“ 算法。“Octree“ 算法允许我们插入自己的算法来量子化我们的图像。
这里有微软的两片文章,或许对我们有帮助:KB 319061 和 Optimizing Color Quantization for ASP.NET Images (微软Morgan Skinner著)。Morgan Skinner提供了很好的“Octree“ 算法代码,大家可以下载参考使用。
使用octreequantizer很方便:
system.drawing.bitmap b = new System.Drawing.Bitmap(“c://original_image.gif“);
System.Drawing.Image thmbnail = b.GetThumbnailImage(100,75,null,new IntPtr());
OctreeQuantizer quantizer = new OctreeQuantizer ( 255 , 8 ) ;
using ( Bitmap quantized = quantizer.Quantize ( thmbnail ) )
{
quantized.Save(“c://thumnail.gif“, System.Drawing.Imaging.ImageFormat.Gif);
}
octreequantizer grayquantizer = new GrayscaleQuantizer ( ) ;
using ( Bitmap quantized = grayquantizer.Quantize ( thmbnail ) )
{
quantized.Save(“c://thumnail.gif“, System.Drawing.Imaging.ImageFormat.Gif);
}
效果图片如下(是不是漂亮多了?):
点击这里下载项目代码,修改namespace就可以在你自己的项目中使用它了。
本文来自:http://www.linuxpk.com/48311.html
相关文章推荐
- [译]在.net中使用GDI+来提高gif图片的保存画质
- 在.net中使用GDI+来提高gif图片的保存画质
- 在.net中使用GDI+来提高gif图片的保存画质
- 在.net中使用GDI+来提高gif图片的保存画质
- .net中使用GDI+提高gif图片画质代码
- 在.net中使用GDI来提高gif图片的保存画质
- vc6.0使用gdi+在内存中绘图并将其保存为bmp,jpg,gif,png等格式的图片
- vc6.0使用gdi+在内存中绘图并将其保存为bmp,jpg,gif,png等格式的图片
- VB6.0用GDI+保存图片为JPG、TIFF、PNG、GIF、BMP等格式
- 使用gdi+的Image旋转图片并保存
- VB6.0用GDI+保存图片为JPG、TIFF、PNG、GIF、BMP等格式
- 猎豹MFC--使用GDI+打开保存图片--把bmp格式图像 保存为了 jpeg格式
- 使用Glide加载的图片保存到相册,保存gif到相册
- 使用kindeditor作为富文本编辑器,内容和图片的保存
- Python3 初学实践案例(12)将源目录中的图片根据设定最长边参数保存到目标目录脚本(Image 的使用)
- GDI+ 保存图片
- photoshop切片使用教程(保存为页面与图片)
- Fresco 使用笔记(一):加载gif图片并播放
- iOS-使用系统类库加载gif格式图片
- 数字图像处理 CImage类的使用与封装(jpg png gif tif bmp等格式图像的加载、数据读写、保存等功能)