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