版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三讲:GDI+编程的基本概念主讲人:阙海忠 UIPower CEOGDI+的介绍GDI+是Windows XP中的一个子系统,它主要负责在显示屏幕和打印设备输出有关信息,它是一组通过C+类实现的应用程序编程接口。GDI+对以前的Windows版本中GDI进行了优化,并添加了许多新的功能。作为图形设备接口的GDI+使得应用程序开发人员在输出屏幕和打印机信息的时候无需考虑具体显示设备的细节,他们只需调用GDI+库输出的类的一些方法即可完成图形操作。2GDI+的使用方法在使用GDI+的cpp文件中包含GdiPlus.h文件,并引用命名空间using namespace Gdiplus; 代码如下:
2、#include using namespace Gdiplus;3GDI+的使用方法需要在项目属性中作如下设置,以支持GDI+的静态库编译:4GDI+的使用方法GDI+进行初始化:/GDI+资源初始化ULONG_PTR uToken = 0;GdiplusStartupInput gdiplusStartupInput;GdiplusStartup(&uToKen, &gdiplusStartupInput, NULL);5GDI+的使用方法反初始化代码:/销毁GDI+资源GdiplusShutdown(uToKen);6透明度合成运算透明度是像素之间的一种合成运算。它的计算公式是:输出颜色
3、=前景色*Alpha/255+背景色*(255-Alpha)/255举个例子来说,假设有一个点,其颜色值为RGB(0,0,0),背景色值为RGB(255,255,255),在进行输出时将透明度设置为100,输出的颜色为:Result.Red = 0*100/255+255*(255-100)/255 = 155Result.Green = 0*100/255+255*(255-100)/255 = 155Result.Blue = 0*100/255+255*(255-100)/255 = 1557Graphics类的构造Graphics(HDC hdc);/以HDC构造Graphics,对G
4、raphics的绘制操作,就绘制在hdc指定的位图中。Graphics(HWND hwnd);/以HWND构造Graphics,对Graphics的绘制操作,就绘制在hwnd窗口上。Graphics(Image *image);/Image *是GDI+中的图像指针,对Graphics的绘制操作,就绘制在image所指的图像对象中。8Bitmap类的构造Bitmap(const WCHAR *filename);/通过图片的文件名来构造一个Bitmap对象。Bitmap(INT width, INT height, PixelFormat format = PixelFormat32bppAR
5、GB);/通过位图的宽度,位图的高度,像素格式来构造一个空的Bitmap对象,其中format的默认值是PixelFormat32bppARGB,代表32位的颜色信息,颜色组成是A、R、G、B。像素格式还有很多种,比如PixelFormat24bppRGB代表24位的颜色信息,颜色组成为R、G、B;比如PixelFormat16bppRGB,代表16位的颜色信息,颜色组成为R、G、B,其中R占5位,G占6位,B占5位。等等。9Bitmap类的常用方法Bitmap* Clone(const Rect& rect, PixelFormat format);Bitmap* Clone(INT x,
6、INT y, INT width, INT height, PixelFormat format); Bitmap* Clone(const RectF &rect, PixelFormat format);Bitmap* Clone(REAL x, REAL y, REAL width, REAL height, PixelFormat format);/以上四个方法为Bitmap的拷贝方法,从源位图的指定区域拷贝出新的位图对象出来,并用format像素格式应用在新的Bitmap对象中。10Bitmap类的常用方法UINT GetWidth();/获取位图的宽度UINT GetHeight(
7、);/获取位图的高度GetPixel(INT x, INT y, Color *color);/获取位图指定位置的颜色SetPixel(INT X, INT y, const Color &color);/设置位图指定位置的颜色11常用的画刷单色画刷,类名SolidBrush,用纯色填充图形。影线画刷,类名HatchBrush,用各种线型图案填充图形。纹理画刷,类名TextureBrush,使用图像来填充图形。线性渐变画刷,类名LinearGradientBrush,使用渐变的色彩填充图形,渐变是指一种颜色沿着指定的方向慢慢变为另一种颜色。12SolidBrush创建单色画刷SolidBrus
8、h(const Color &color);下列的代码创建了一个蓝色的单色画刷。SolidBrush blueBrush(Color(255,0,0,255);13HatchBrush创建影线画刷HatchBrush(HatchStyle hatchStyle, const Color& foreColor, const Color& backColor);hatchStyle:影线画刷的类型foreColor:影线画刷线条的前景色backColor:影线画刷线条的背景色。14HatchBrush创建影线画刷创建代码如下:Color black(255,0,0,0);Color white(2
9、55,255,255,255);HatchBrush brushA(HatchStyleHorizontal, black, white); /水平横线HatchBrush brushB(HatchStyleVertical, black, white); /垂直坚线HatchBrush brushC(HatchStyleCross, black, white); /十字网格线15HatchBrush创建影线画刷前景色与背景色的关系,就像国际象棋盘,第一块为背景色,第二块为前景色,第三块为背景色,如图:16TextureBrush创建纹理画刷TextureBrush(Image *image)
10、;image为图像的指针。如:Image image(L“TEXTURE.BMP”);TextureBrush textureBrush(&image);17LinearGradientBrush创建渐变画刷LinearGradientBrush(Point &point1, Point &point2, Color &color1, Color &color2);point1为渐变的起点坐标。point2为渐变的终点坐标。color1为起点的颜色。color2为终点的颜色。18Pen创建画笔Pen(const Color &color, REAL width = 1.0f );/color为
11、画笔的颜色,width为画笔的宽度。Pen(const Brush *brush, REAL width = 1.0f );/brush为画刷的指针,width为画笔的宽度。通过画刷来构造一个画笔,这种画笔绘制出来的线条,边框就犹如在一张带图案的纸张上,剪出的指定宽度的线条,边框的效果。19Graphics绘制图片把图片绘制在指定位置的方法如下:DrawImage(Image* image,const Point& point);DrawImage(Image* image,INT x,INT y);DrawImage(Image* image, const PointF& point)Dra
12、wImage(Image* image, REAL x, REAL y);其中x,y为要绘制的位置,可为INT类型,也可为REAL类型。point为要绘制的位置的结构体变量,可为Point类型(内部成员为INT类型),也可为PointF类型(内部成员为REAL类型)。20Graphics绘制图片把图片绘制在指定区域的方法如下:DrawImage(Image* image, const Rect& rect);DrawImage(Image* image, INT x, INT y, INT width, INT height);DrawImage(Image* image, const Rec
13、tF& rect);DrawImage(Image* image, REAL x, REAL y, REAL width, REAL height);其中x,y为指定矩形区域的坐上角坐标,可为INT类型,也可为REAL类型。width,height为指定矩形区域的宽度与高度,可为INT类型,也可为REAL类型。rect为指定的矩形区域,可为Rect类型(内部成员为INT类型),也可为RectF类型(内部成员为REAL类型)。21Graphics绘制图片把图片的指定区域绘制在指定位置的方法如下:DrawImage(Image* image, INT x, INT y, INT srcx, INT
14、 srcy, INT srcwidth, INT srcheight, Unit srcUnit);DrawImage(Image* image, REAL x, REAL y, REAL srcx, REAL srcy, REAL srcwidth, REAL srcheight, Unit srcUnit);其中x,y为要绘制的指定位置。可为INT类型,也可为REAL类型。srcx,srcy为图片指定区域的左上角坐标。可为INT类型,也可为REAL类型。srcwidth,srcheight为图片指定区域的宽度与高度。可为INT类型,也可为REAL类型。22Graphics绘制图片srcUn
15、it为Unit的枚举成员,它指定了所用的度量单位。比如UnitPixel表示以像素为单位;UnitPoint表示以点为单位;UnitInch表示以英寸为单位。一般情况下,我们是选择UnitPixel,以像素为单位。23Graphics绘制图片把图片的指定区域绘制在指定目标区域的方法如下:DrawImage(Image* image, const Rect& destRect, INT srcx, INT srcy, INT srcwidth, INT srcheight, Unit srcUnit);DrawImage(Image* image, const RectF& destRect,
16、REAL srcx, REAL srcy, REAL srcwidth, REAL srcheight, Unit srcUnit);destRect为指定目标区域。可为Rect类型(内部成员为INT类型),也可以RectF类型(内部成员为REAL类型)。srcx,srcy为图片指定区域的左上角的坐标,可为INT类型,也可为REAL类型。24Graphics绘制图片srcwidth,srcheight为图片指定区域的宽度与高度,可为INT类型,也可为REAL类型。srcUnit为Unit的枚举成员,它指定了所用的度量单位。25Graphics绘制文字DrawString(const WCHAR
17、 *string, INT length, const Font *font, const PointF &origin, const Brush *brush);DrawString(const WCHAR *string, INT length, const Font *font, const RectF &layoutRect, const StringFormat *stringFormat, const Brush *brush);DrawString(const WCHAR *string, INT length, const Font *font, const PointF &o
18、rigin, const StringFormat *stringFormat, const Brush *brush);其中:string为要绘制的字符串,类型为const WCHAR*,宽字符指针。length为要绘制的字符串的长串,如果该值为-1,表明绘制以NULL结尾的string字符串。26Graphics绘制文字font为要绘制的文本所使用的字体。比如Font myFont(L宋体, 16);,宋体,字体大小为16号。layoutRect为文本输出的矩形区域。origin为文本的绘制起点位置,数据类型是PointF。stringFormat为文本输出的格式,数据类型是StringF
19、ormat*。brush为绘制文本所使用的画刷。27Graphics绘制文字以下为简单的绘制文本的示例代码:Gdiplus:Font myFont(LArial, 10);SolidBrush brushA(Color(255,0,0,255);graphics.DrawString(L示例文本, -1, &myFont, PointF(200,575), &brushB);28Graphics绘制文字以下为带文本输出格式的字符串绘制代码:Gdiplus:Font myFont(LArial, 16);RectF layout(0, 0, 500.0f, 200.0f);/设置对齐方式(水平居
20、中对齐)StringFormat format;format.SetAlignment(StringAlignmentCenter);SolidBrush brushB(Color(255,0,0,255);graphics.DrawString(L示例文本, -1, &myFont, layout, &format, &brushB);29字符串格式设置StringFormat为字符串格式类,通过它的SetAlignment跟SetLineAlignment可以设置字符串的对齐方式。SetAlignment为水平方向上的对齐方式。参数StringAlignmentNear为左对齐,参数Str
21、ingAlignmentCenter为水平居中对齐,参数StringAlignmentFar为右对齐。SetLineAlignment为垂直方向上的对齐方式。参数StringAlignmentNear为顶对齐,参数StringAlignmentCenter为垂直居中对齐,参数StringAlignmentFar为底对齐。30MeasureString测量字符串MeasureString(const WCHAR *string, INT length, const Font *font, const PointF &origin, const StringFormat *stringFormat
22、, RectF *boundingBox);MeasureString(const WCHAR *string, INT length, const Font *font, const PointF &origin, RectF *boundingBox);MeasureString(const WCHAR *string, INT length, const Font *font, const RectF &layoutRect, const StringFormat *stringFormat, RectF *boundingBox);MeasureString(const WCHAR *
23、string, INT length, const Font *font, const RectF &layoutRect, RectF *boundingBox);31MeasureString测量字符串MeasureString(const WCHAR *string, INT length, const Font *font, const SizeF &layoutRectSize, const StringFormat *stringFormat,SizeF *size);其中:string为欲测量的字符串。Length为要测量的字符串长度,-1表示测试以NULL结尾的string字符
24、串。Font为字符串要输出时采用的字体。layoutRect为文本输出时指定的矩形区域。layoutRectSize为文本输出时指定的尺寸。32MeasureString测量字符串boundingBox为测量结果,表示容纳全部文本时所需要的矩形区域。size为测量结果,表示容纳全部文本时所需要的尺寸。codepointsFitted为测量结果,表示指定的区域中能够容纳的字符个数。linesFilled为测量结果,表示指定的区域中能够容纳的字符行数。origin为文本输出的起点。33SetTrimming字符串去尾SetTrimming(StringTrimming trimming);Stri
25、ngTrimming是一个枚举值,有以下成员:StringTrimmingNone,代表不使用去尾。StringTrimmingCharacter,代表以字符为单位去尾。StringTrimmingWord,代表以单词为单位去尾。StringTrimmingEllipsisCharacter,代表以字符为单位去尾,被去尾的部分用省略号表示。StringTrimmingEllipsisWord,代表以单词为单位去尾,被去尾的部分用省略号表示。StringTrimmingEllipsisPath,代表省略了字符串的中间部分,保证字符串的首尾都能够显示。这种方式比较不常用。34Graphics绘制直
26、线DrawLine(const Pen* pen, INT x1, INT y1, INT x2, INT y2);DrawLine(const Pen* pen,const Point& pt1, const Point& pt2);DrawLine(const Pen* pen, REAL x1,REAL y1,REAL x2,REAL y2);DrawLine(const Pen* pen,const PointF& pt1,const PointF& pt2);其中:pen为GDI+的画笔。x1,y1为直线的起点坐标,可为INT类型,也可为REAL类型。X2,Y2为直线的终点坐标,可为
27、INT类型,也可为REAL类型。pt1为直线的起点坐标,可为Point类型,也可为PointF类型。Pt2为直线的起点坐标,可为Point类型,也可为PointF类型。35Graphics绘制矩形DrawRectangle( const Pen* pen, INT x, INT y, INT width, INT height);DrawRectangle( const Pen* pen, const Rect& rect );DrawRectangle( const Pen* pen, REAL x, REAL y, REAL width, REAL height);DrawRectangl
28、e( const Pen* pen, const RectF& rect );其中:pen为GDI+的画笔。x,y为矩形的左上角坐标位置,可为INT类型,也可为REAL类型。width,height为矩形的宽度与高度,可为INT类型,也可为REAL类型。rect为矩形的区域,可为Rect类型(内部成员是INT类型),也可为RectF类型(内部成员是REAL类型)。36Graphics绘制圆DrawEllipse(const Pen* pen, INT x, INT y, INT width, INT height);DrawEllipse(const Pen* pen, const Rect&
29、 rect);DrawEllipse(const Pen* pen, REAL x, REAL y, REAL width, REAL height);DrawEllipse(const Pen* pen, const RectF& rect);其中:pen为GDI+的画笔。x为圆的外切矩形的左上角x坐标,可为INT类型,也可为REAL类型。y为圆的外切矩形的左上角y坐标,可为INT类型,也可为REAL类型。width为圆的外切矩形的宽度,可为INT类型,也可为REAL类型。height为圆的外切矩形的高度,可为INT类型,也可为REAL类型。rect为圆的外切矩形,可为Rect类型,也可为R
30、ectF类型。37Graphics绘制饼DrawPie(const Pen* pen, INT x, INT y, INT width, INT height, REAL startAngle, REAL sweepAngle);DrawPie(const Pen* pen, const Rect& rect, REAL startAngle, REAL sweepAngle);DrawPie(const Pen* pen, REAL x, REAL y, REAL width, REAL height, REAL startAngle, REAL sweepAngle);DrawPie(co
31、nst Pen* pen, const RectF& rect, REAL startAngle, REAL sweepAngle);其中:pen为GDI+的画笔。x为饼的限定矩形的左上角坐标X,可为INT类型,也可为REAL类型。y为饼的限定矩形的左上角坐标Y,可为INT类型,也可为REAL类型。38Graphics绘制饼width为饼的限定矩形的宽度,可为INT类型,也可为REAL类型。height为饼的限定矩形的高度,可为INT类型,也可为REAL类型。rect为饼的限定矩形,可为Rect类型,也可为RectF类型。startAngle为饼在圆中的起始角度。sweepAngle为饼角的角
32、度。39Graphics填充矩形FillRectangle( const Brush* brush, INT x, INT y, INT width, INT height);FillRectangle( const Brush* brush, const Rect& rect );FillRectangle( const Brush* brush, REAL x, REAL y, REAL width, REAL height);FillRectangle( const Brush* brush, const RectF& rect );其中:brush为GDI+的画刷。x,y为矩形的左上角
33、坐标位置,可为INT类型,也可为REAL类型。width,height为矩形的宽度与高度,可为INT类型,也可为REAL类型。rect为矩形的区域,可为Rect类型(内部成员是INT类型),也可为RectF类型(内部成员是REAL类型)。40Graphics填充圆FillEllipse(const Brush* brush, INT x, INT y, INT width, INT height);FillEllipse(const Brush* brush, const Rect& rect);FillEllipse(const Brush* brush, REAL x, REAL y, R
34、EAL width, REAL height);FillEllipse(const Brush* brush, const RectF& rect);其中:brush为GDI+的画刷。x为圆的外切矩形的左上角x坐标,可为INT类型,也可为REAL类型。y为圆的外切矩形的左上角y坐标,可为INT类型,也可为REAL类型。width为圆的外切矩形的宽度,可为INT类型,也可为REAL类型。height为圆的外切矩形的高度,可为INT类型,也可为REAL类型。rect为圆的外切矩形,可为Rect类型,也可为RectF类型。41Graphics填充饼FillPie(const Brush* brush
35、, INT x, INT y, INT width, INT height, REAL startAngle, REAL sweepAngle);FillPie(const Brush* brush, const Rect& rect, REAL startAngle, REAL sweepAngle);FillPie(const Brush* brush, REAL x, REAL y, REAL width, REAL height, REAL startAngle, REAL sweepAngle);FillPie(const Brush* brush, const RectF& rec
36、t, REAL startAngle, REAL sweepAngle);其中:brush为GDI+的画刷。x为饼的限定矩形的左上角坐标X,可为INT类型,也可为REAL类型。y为饼的限定矩形的左上角坐标Y,可为INT类型,也可为REAL类型。42Graphics填充饼width为饼的限定矩形的宽度,可为INT类型,也可为REAL类型。height为饼的限定矩形的高度,可为INT类型,也可为REAL类型。rect为饼的限定矩形,可为Rect类型,也可为RectF类型。startAngle为饼在圆中的起始角度。sweepAngle为饼角的角度。43GDI的设备描述表DC与GDI+的Graphic
37、s的作用与区别 DC:现在大家已经用GDI编写过应用程序了,对设备描述表(DC)的概念比较熟悉,设备描述表是Windows使用的一个数据结构,用于存储具体设备能力和与如何在设备上重绘一些项目有关的属性信息。首先你必须获得一个设备描述表句柄,然后在图形绘制时,你把这个句柄作为一个参数传递给GDI图形绘制函数。当然你也可以把它传递给获得或设置设备描述表有关属性的函数。44GDI的设备描述表DC与GDI+的Graphics的作用与区别利用GDI+函数,你不必使用句柄或者设备描述表。相反,你可以简单地创建一个图形对象(Graphics),然后以你熟悉的面向对象的编程方式调用它的方法即可,譬如myGra
38、phicsObject.DrawLine(parameters)。Graphics对象是GDI+的核心,正如设备描述表是GDI的核心一样,设备描述表(DC)和图形对象(Graphics)在不同的环境下扮演着同样的角色,发挥着类似的作用,但是两者也存在着本质的不同。前者使用基于句柄的编程方法而后者使用面向对象的编程方法。45绘图对象的使用方式的差别图形对象和设备对象一样,与屏幕的显示窗口有关,它包含着与项目重绘有关的属性信息(譬如平滑度),然而图形对象并没有像GDI那样与Pen(画笔)、Path(路径)、Image(图像)、Font(字体)等搅在一起。46绘图对象的使用方式的差别在GDI中,所有与绘图有关的绘图对象必须选入指定设备描述表中(使用SelectObject函数),才能被指定的设备描述表所使用。而在GDI+中,你只需把这些绘图对象作为一个参数传递给图形对象Graphics方法调用即可,每一个图形对象所使用的绘图工具至于它调用方法使用的参数有关,它可以通过参数使用多种Pen和Brush绘图,而不是与特定的笔和画刷联系在一起。47GDI+新增的功能渐变的画刷GDI+允许用户创建一个沿路径或直线渐变的画刷,来填充外形(shapes),路
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度工程分包解除合同2篇
- 效果图合同范本
- 酒店转让协议书范本
- 年度城市轨道交通建设合同(2024版)
- 鱼塘合作协议合同范本
- 四年级方程知识课件
- 风筝真美丽课件
- 2024年度电竞产业合作开发合同
- 《中国古代陶器》课件
- 食堂泔水处理协议书模板
- 阳光少年实践活动心得感悟3篇
- pep人教版英语六年级上册Unit2《Waystogotoschool》大单元作业设计(三)
- 五年级家长会课件(共22张PPT)
- 《校园植物探秘》校本课程开发实施纲要
- 初中物理人教九年级(2023年更新)第十七章 欧姆定律九年级物理电阻的测量教学设计
- 【机械手】-简易物料搬运机械手的PLC设计
- 言语的第三思维结合语境
- TD-T 1070.4-2022 矿山生态修复技术规范 第4部分:建材矿山
- 城市轨道交通设备系统之通风空调系统概述
- 绿盟极光漏洞扫描工具使用方法
- APQP-4-08产品质量策划总结和认定报告
评论
0/150
提交评论