技术开发 频道

C# GDI+编程之基础篇


二、 图像操作—缩略图,缩放与保存
在本文示例中,我们将实现如下的任务:
1. 创建缩略图。
2. 缩放一个加载的图像。
3. 保存一个操作中的图像。
a) 创建缩略图
缩略图是图像的浓缩版本。典型情况下,一幅缩略图图像的尺寸为80×200像素。在GDI+中,一个图像的缩略图可以通过使用Image类的GetThumbnailImage()方法来创建。其函数原型如下:
public Image GetThumbnailImage ( int thumbWidth, int thumbHeight, GetThumbnailImageAbort callback, IntPtr callbackData )
    第一个参数相应于缩略图的宽度;第二个参数相应于生成的缩略图的高度;第三个参数是一个Image.GetThumbnailImageAbort委托。在 GDI+ 1.0 版中不使用此委托。即便如此,也必须创建一个委托并在该参数中传递对此委托的引用。第四个参数同样没有使用,但是也需要提供以实现兼容性。注意,第四个参数必须为IntPtr.Zero。
如果前两个参数(也就是宽度和高度)都为0的话,那么,GDI+返回一个嵌入式缩略图。否则,使用系统定义尺寸创建该缩略图。例如,如果img是一个图像类的实例,并且使用的宽度和高度都是系统定义的,创建一个缩略图的语句应该如下所示:
Image thumbNailImage = img.GetThumbnailImage(0,0,tnCallBack,IntPtr.Zero);
在此,thumbNailImage包含返回的缩略图,而tnCallback是一个相应于Image.GetThumbnailImageAbort的函数,其定义如下:
//必须调用它,但是没有使用 style='font-size:10.0pt;font-family:Verdana'>publicbool tnCallbackMethod() { return false; }
b) 缩放一个加载的图像
缩放是放大或缩小一个图像的过程—通过在图像尺寸上乘以缩放因子实现。其中,缩放因子=期望的图像尺寸/当前图像尺寸。例如,要把一个图像放大200%,则当前尺寸必须乘以200%(200%=200/100=2);为了缩小一个图像到25%,则当前尺寸必须乘以25%或0.25(25/100=0.25倍)。

c) 保存图像
保存操作是图像操作中的关键操作之一。在保存一个图像时,图像相应的类型信息也必须进行保存;也就是说,该图像的扩展名在这一过程中具有重要角色。每一种类型相应于一个特定的格式。实质上,在保存一个图像时,根据该格式输出数据是非常必要的。然而,借助于GDI+ API的优势,一个对Image类的Save()方法的简单调用就可以把相应的写数据操作中所有细节省略掉。这个方法使用两个参数—被保存的图像的名字和待保存图像的格式。该格式能够通过ImageFormat类提供的类型来指定。下列表格指定了GDI+支持的各种图像格式。

属性 描述
Bmp 指定BMP格式。
Emf 指定EMF(增强的元文件格式)。
Exif 指定EXIF格式。
Gif 指定GIF格式。
Guid 指定一个GUID结构,用于描述ImageFormatobject。
Icon 指定Windows图标格式。
Jpeg 指定JPEG格式。
MemoryBmp 指定内存位图格式。
Png 指定PNG格式。
Tiff 指定TIFF格式。
Wmf 指定WMF(Windows元文件格式)。
其中,Emf和Wmf是特定于Windows系统的。
假定你想使用名字“checker.gif”保存一个图像,那么,相应的实现语句将是:
curImage.Save(“checker.gif”,ImageFormat.Gif);
这里,curImage对应于Image类的实例。
在下一节中,我将对前面开发的这个应用程序进行扩展。
0
相关文章