C# GDI+编程之基础篇 一、关于 GDI+从本质上来看,GDI+为开发者提供了一组实现与各种设备(例如监视器,打印机与其它具有图形化能力但不与涉与这些图形细节的设备)进行交互的库函数。GDI+的本质在于,它能够替代开发人员实现与例如显示器与其它外设的交互;而从开发者角度来看,要实现与这些设备的直接交互却是一项艰巨的任务。以下图 1 展示了 GDI+在开发人员与上述设备之间起着重要的中介作用。其中,GDI+为我们“包办”了几乎一切—从把一个简单的字符串“HelloWorld”打印到控制台到绘制直线,矩形甚至是打印一个完整的表单等。 图 1.GDI+担当着重要的中介作用那么,GDI+是如何工作的呢?为了弄清这个问题,让我们来分析一个示例—绘制一条线段。实质上,一条线段就是一个从一个开始位置(X0,Y0)到一个完毕位置(Xn,Yn)的一系列像素点的集合。为了画出这样的一条线段,设备(在本例中指显示器)需要知道相应的设备坐标或物理坐标。然而,开发人员不是直接告诉该设备,而是调用 GDI+的 drawLine()方法,然后,由 GDI+在存(即“视频存”)中绘制一条从点 A 到点 B 的直线。GDI+读取点 A 和点 B 的位置,然后把它们转换成一个像素序列,并且指令监视器显示该像素序列。简言之,GDI+把设备独立的调用转换成了一个设备可理解的形式;或者实现相反方向的转换。 至此,我们已经简单了解了 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 的话,那么...