GDI+windows,gdi+window什么意思

  GDI+windows,gdi+window什么意思

  1.概观

  GDI的全称是图形设备接口,即图形设备接口。它是图形显示和实际物理设备之间的桥梁。GDI接口是基于函数的。虽然省了程序员不少力气,但编程方法还是比较麻烦。比如显示一张位图,需要进行“创建位图、读取位图文件信息、启用场景设备、改变调色板”等一系列操作。但是,有了GDI,繁琐的步骤又被简化了。顾名思义,GDI是GDI的增强版,是微软继Windows 2000之后在操作系统中提供的新接口。

  2.GDI的主要功能GDI主要提供了以下三个功能:(1)二维矢量图形:GDI提供了存储图元信息的类(或结构),存储图元绘制方式信息的类,以及实际绘制的类;

  (2)图像处理:大部分图片很难被定义为一组直线和曲线,无法用二维矢量图形进行处理。所以GDI为我们提供了位图、图像等类,可以用来显示、操作、保存BMP、JPG、GIF等图像格式。

  (3)文本显示:GDI支持使用各种字体、字号和样式来显示文本。与GDI相比,GDI是基于C类的面向对象的应用程序接口,所以更容易使用。GDI的核心是设备上下文,GDI函数依赖于设备上下文的句柄,其编程方法基于句柄。GDI不需要一直依赖句柄或设备上下文。用户只需要创建一个图形对象,就可以用面向对象的方式调用它的成员函数进行图形操作。编程方法基于对象。

  3.在用设备上下文画线之前,必须先调用SelectObject将pen对象与设备上下文关联起来。此后,在设备的上下文中绘制的所有线都使用该笔,直到选择了不同的笔。使用GDI的画线代码如下

  //TODO:在此添加命令处理程序代码

  CClientDC clientDC//目标DC

  CPen pen (PS_SOLID,1,RGB(0,0,255));

  clientDC。选择对象(钢笔。GetSafeHandle());

  //开始绘图

  clientDC。移动到(0,0)

  clientDC。LineTo(rect.right,0);

  clientDC。select object(old object);

  从上面的代码可以看出,在GDI编程中,几乎所有的操作都是围绕着设备上下文dc进行的。的确,这就是GDI编程的特点!设备上下文是Windows使用的结构。在所有GDI操作之前,有必要获取特定设备的上下文。函数中的CClientDC dc (this)语句完成了这个函数。用GDI进行图形图像处理的一般操作步骤如下:1 .获取指定窗口的DC。2.确定使用的坐标系和映射方法。3.执行图形、图像或文字处理。4.释放用过的DC。但是,在GDI中,只需要将Pen对象作为参数直接传递给Graphics类的DrawLine方法,而不需要将Pen对象与Graphics对象相关联。4.GDI绘图示例使用如下GDI绘图代码

  //TODO:在此添加命令处理程序代码

  CClientDC clientDC(这个);

  //创建一个图形对象

  Graphics图形(clientDC);

  //创建钢笔

  Pen myPen

  我的笔。SetWidth(1);

  //绘制X轴

  我的笔。SetColor(颜色:蓝色);

  图形。DrawLine( myPen,0,0,rect.right,0);

  (1)创建图形对象:图形对象表示GDI绘图面,用于创建图形图像。(2)用图形对象绘制线条和形状、渲染文本或显示和操作图像。与GDI相比,增加了一系列新功能:渐变画笔、基数样条、持久路径对象、变换矩阵对象、可缩放区域、Alpha混合、丰富的图像格式支持等。接下来,让我们用实际代码来一一实现GDI的新功能。4.1渐变画笔(GDI提供线性渐变画笔和路径渐变画笔,用于填充图形、路径和区域。线性渐变画笔使用渐变颜色填充图形。用路径渐变画笔填充绘图时,可以指定从绘图的一部分移动到另一部分时画笔颜色如何变化。例如,我们只能指定图形的中心颜色和边缘颜色。当画笔从图形的中间向外边缘移动时,画笔会逐渐从中心色变为边缘色。)

  //TODO:在此添加命令处理程序代码

  CClientDC clientDC(这个);

  CRect rect

  GetClientRect(rect);

  //创建一个图形对象

  Graphics图形(clientDC);

  //创建渐变画笔

  LinearGradientBrush lgb(Point(0,0),Point(rect.right,rect.bottom),Color:Blue,Color:Green);

  图形。FillRectangle( lgb,0,0,rect.right,rect . bottom);

  4.2基数样条函数(基数样条是指一系列单独的曲线连接起来形成一条更大的曲线。由样条点(点结构)数组指定,并穿过数组中的每个点。基数样条平滑地穿过数组中的每一个点(没有尖角),因此它比直线连接创建的路径更精确。)

  //TODO:在此添加命令处理程序代码

  CClientDC clientDC(这个);

  //创建一个图形对象

  Graphics图形(clientDC);

  点点[]=

  点(0,0),点(100,200),点(200,0),点(300,200),点(400,00)

  //直接画线

  for(int I=0;我我)

  图形。DrawLine(钢笔(颜色:蓝色,3),点数[i],点数[I 1]);

  //用基数样条绘制线条

  图形。DrawCurve(钢笔(颜色:红色,3),点数,5);

  4.3变形和矩阵对象(GDI提供了矩阵对象,这是一个强大的工具,可以进行变形(旋转、平移、缩放等。)简单灵活。矩阵对象应与要变形的对象结合使用。对于GraphicsPath类,我们可以使用它的成员函数Transform来接收矩阵参数进行转换。)

  //TODO:在此添加命令处理程序代码

  CClientDC clientDC(这个);

  //创建一个图形对象

  Graphics图形(clientDC);

  GraphicsPath路径;

  路径。AddRectangle(Rect(250,20,70,70));

  图形。DrawPath(钢笔(颜色:黑色,1),路径);//在应用变形矩阵之前绘制一个矩形

  //路径变形

  矩阵matrix1,matrix2

  矩阵1。旋转(45.0 f);//顺时针旋转45度

  路径。transform(matrix 1);//应用变形

  图形。DrawPath(钢笔(颜色:红色,3),路径);

  矩阵2。标度(1.0f,0.5f);//转换为平行四边形规则

  路径。transform(matrix 2);//应用变形

  图形。DrawPath(钢笔(颜色:蓝色,3),路径);

  4.4丰富的图像格式支持(GDI提供图像、位图和图元文件类,方便用户加载、操作和保存图像格式。GDI支持BMP、GIF、JPEG、EXIF、PNG、TIFF、ICON、WMF、EMF等图像格式。几乎涵盖了所有常见的图像格式。)

  来自:http://edu . 292775 . com/windows/2012 11/16377 . html

GDI+windows,gdi+window什么意思