第9章 GDI+与图形编程
- 格式:ppt
- 大小:416.00 KB
- 文档页数:19
一、GDIGDI是位于应用程序与不同硬件之间的中间层,这种结构让程序员从直接处理不同硬件的工作中解放出来,把硬件间的差异交给了GDI处理。
GDI通过将应用程序与不同输出设备特性相隔离,使Windows 应用程序能够毫无障碍地在Windows支持的任何图形输出设备上运行。
例如,我们可以在不改变程序的前提下,让能在Epson点式打印机上工作的程序也能在激光打印机上工作。
它把windows系统中的图形输出转换成硬件命令然后发送给硬件设备。
GDI是以文件的形式存储在系统中,系统需要输出图形时把它载入内存,如果转换成硬件命令时遇到非GDI命令,系统还可能载入硬件驱动程序,驱动程序辅助GDI把图形命令转换成硬件命令。
二、设备环境Windows系统是用来给应用程序提供设备独立性的工具,它是windows系统为了处理输出设备而使用的一种内部数据结构,设备环境是windos程序,驱动程序,和输出设备(如打印机,绘图仪)之间的纽带,GDI是一组C++类,它在驱动程序的协助下把数据描绘在硬件上,它位于应用程序与硬件之间,把数据从一方传到另一方。
在Visual Studio .NET中Micro$oft解决了GDI中的许多问题,并让它变得易用,GDI的.net版本叫做GDI+。
三、GDI+GDI+是GDI的下一个版本,它进行了很好的改进,并且易用性更好。
GDI的一个好处就是你不必知道任何关于数据怎样在设备上渲染的细节,GDI+更好的实现了这个优点,也就是说,GDI是一个中低层API,你还可能要知道设备,而GDI+是一个高层的API,你不必知道设备。
例如你如果要设置某个控件的前景和背景色,只需设置BackColor和ForeColor属性。
四、编程模式的变化“GDI uses a stateful model, whereas GDI+ uses a stateless”——GDI是有状态的,GDI+是无无状态的。
1、不再使用设备环境或句柄在使用GDI绘图时,必须要指定一个设备环境(DC),用来将某个窗口或设备与设备环境类的句柄指针关联起来,所有的绘图操作都与该句柄有关。
gdi+程序设计GDI+是图形设备接口的一个版本,用于在Windows操作系统上提供图形绘制功能。
它是.NET Framework的一部分,为开发人员提供了一套丰富的类和方法,用于绘制2D图形、图像和文本。
下面是一个简单的GDI+程序设计示例,该示例在窗体上绘制一个红色的矩形:```csharpusing System;using System.Drawing;using System.Windows.Forms;public class GdiPlusApp:Form{public GdiPlusApp(){this.Paint+=new PaintEventHandler(GdiPlusApp_Paint);}void GdiPlusApp_Paint(object sender, PaintEventArgs e){Graphics g=e.Graphics;Rectangle rect=new Rectangle(10,10, 200,100);SolidBrush brush=new SolidBrush(Color.Red);g.FillRectangle(brush,rect);g.DrawRectangle(Pens.Black,rect);}[STAThread]static void Main(){Application.Run(new GdiPlusApp());}}```在这个示例中,我们创建了一个继承自`Form`的`GdiPlusApp`类。
在`GdiPlusApp`的构造函数中,我们添加了一个`Paint`事件处理器`GdiPlusApp_Paint`。
当窗体需要重新绘制时,就会触发这个事件。
在`GdiPlusApp_Paint`方法中,我们创建了一个`Graphics`对象,然后使用`SolidBrush`和`Pens`类来绘制一个红色的矩形和一个黑色的边框。
最后,我们在`Main`方法中创建了`GdiPlusApp`的实例并启动了应用程序。
GDI+ SDK参考(翻译版本)序言.............................................................................................................................................- 4 - 目标.....................................................................................................................................- 4 - 适用范围.............................................................................................................................- 4 - 适用读者.............................................................................................................................- 4 - 运行环境.............................................................................................................................- 4 - 文档组织.............................................................................................................................- 4 - 相关主题.............................................................................................................................- 4 - GDI+的安全考虑........................................................................................................................- 6 - 检验构造函数调用成功与否..............................................................................................- 6 - 分配缓冲区.........................................................................................................................- 6 - 错误校验.............................................................................................................................- 7 - 线程同步.............................................................................................................................- 9 - 相关主题...........................................................................................................................- 10 - 关于GDI+.................................................................................................................................- 11 - GDI+ 介绍........................................................................................................................- 11 - GDI+ 概览..............................................................................................................- 11 -GDI+ 的三个组成部分..........................................................................................- 11 -基于类的接口架构....................................................................................................- 12 - GDI+提供了哪些新东西?..............................................................................................- 12 - 新特征.......................................................................................................................- 12 -编程模式的改变........................................................................................................- 15 - 线条、曲线和图形...........................................................................................................- 19 - 矢量图概览...............................................................................................................- 19 -钢笔、线条和矩形....................................................................................................- 20 -椭圆和弧...................................................................................................................- 22 -多边形.......................................................................................................................- 22 -基数样条...................................................................................................................- 23 -贝塞尔样条...............................................................................................................- 24 -路径...........................................................................................................................- 25 -画刷和填充图形........................................................................................................- 27 -开放与闭合曲线........................................................................................................- 29 -区域...........................................................................................................................- 30 -裁剪...........................................................................................................................- 31 -路径平直化...............................................................................................................- 32 -线条和曲线的抗锯齿功能........................................................................................- 32 - 图象、位图和图元文件....................................................................................................- 33 - 位图类型...................................................................................................................- 34 -图元文件...................................................................................................................- 37 -绘制、定位和复制图片............................................................................................- 39 -裁剪和缩放图象........................................................................................................- 40 - 坐标系统和转换...............................................................................................................- 42 - 坐标系统类型............................................................................................................- 42 -以矩阵来表示转换....................................................................................................- 44 -全局和局部转换........................................................................................................- 48 - 图形容器...........................................................................................................................- 51 - 使用GDI+.................................................................................................................................- 56 - 使用入门...........................................................................................................................- 56 - 绘制线条...................................................................................................................- 56 -绘制字符串...............................................................................................................- 58 - 使用钢笔绘制线条和形状................................................................................................- 59 - 使用钢笔绘制线条和矩形........................................................................................- 59 -设置钢笔的宽度和对齐方式....................................................................................- 60 -绘制具有线帽的线条................................................................................................- 61 -联接线条...................................................................................................................- 62 -绘制自定义虚线........................................................................................................- 62 -绘制用纹理填充的线条............................................................................................- 63 - 使用画笔填充形状...........................................................................................................- 63 - 用纯色填充形状........................................................................................................- 64 -用阴影图案填充形状................................................................................................- 64 -用图像纹理填充形状................................................................................................- 64 -在形状中平铺图像....................................................................................................- 65 -用渐变色填充形状....................................................................................................- 68 - 使用图像、位图和图元文件............................................................................................- 68 - 加载和显示位图........................................................................................................- 68 -加载和显示图元文件................................................................................................- 69 -记录图元文件............................................................................................................- 69 -剪裁和缩放图像........................................................................................................- 71 -旋转、反射和扭曲图像............................................................................................- 72 -缩放时使用插值模式控制图像质量........................................................................- 73 -创建缩略图像............................................................................................................- 75 -采用高速缓存位图来提高性能................................................................................- 76 -通过避免自动缩放改善性能....................................................................................- 76 -读取图像元数据........................................................................................................- 77 - 使用图像编码器和解码器................................................................................................- 83 - 列出已安装的编码器................................................................................................- 83 -列出已安装的解码器................................................................................................- 84 -获取解码器的类标识符............................................................................................- 86 -获取编码器的参数列表............................................................................................- 88 -将BMP图像转换为PNG图像.............................................................................- 100 -设定JPEG的压缩等级..........................................................................................- 101 -对JPEG图像进行无损变换..................................................................................- 102 -创建和保存多帧图像..............................................................................................- 105 -从多帧图像中复制单帧..........................................................................................- 107 - Alpha 混合线条和填充..................................................................................................- 109 - 绘制不透明和半透明的线条..................................................................................- 109 -用不透明和半透明的画笔绘制..............................................................................- 110 -使用复合模式控制Alpha 混合...........................................................................- 111 -使用颜色矩阵设置图像中的Alpha 值..............................................................- 112 -设置单个象素的alpha值.....................................................................................- 114 - 使用字体和文本.............................................................................................................- 115 - 构造字体系列和字体..............................................................................................- 115 -绘制文本.................................................................................................................- 116 -格式化文本.............................................................................................................- 117 -枚举已安装的字体..................................................................................................- 120 -创建专用的字体集合..............................................................................................- 122 -获取字体规格..........................................................................................................- 126 -对文本使用消除锯齿效果......................................................................................- 130 - 构造并绘制曲线.............................................................................................................- 131 - 绘制基数样条曲线..................................................................................................- 131 -绘制贝塞尔样条......................................................................................................- 133 - 用渐变画刷填充形状.....................................................................................................- 134 - 创建线性渐变..........................................................................................................- 134 -创建路径渐变..........................................................................................................- 137 -将Gamma 校正应用于渐变..............................................................................- 144 - 构造并绘制路径.............................................................................................................- 145 - 使用线条、曲线和形状创建图形..........................................................................- 145 -填充开放式图形......................................................................................................- 147 - 使用图形容器.................................................................................................................- 147 - 管理Graphics 对象的状态................................................................................- 148 -使用嵌套的Graphics 容器................................................................................- 151 - 变换.................................................................................................................................- 154 - 使用世界变换..........................................................................................................- 154 -为什么变换顺序非常重要......................................................................................- 155 - 使用区域.........................................................................................................................- 156 - 对区域使用点击检测..............................................................................................- 156 -对区域使用剪辑......................................................................................................- 157 - 对图像重新着色.............................................................................................................- 158 - 使用颜色矩阵对单色进行变换..............................................................................- 158 -转换图像颜色..........................................................................................................- 160 -缩放颜色.................................................................................................................- 161 -旋转颜色.................................................................................................................- 164 -剪取颜色.................................................................................................................- 166 -使用颜色重映射表..................................................................................................- 168 - 打印.................................................................................................................................- 169 - 将GDI+输出至打印机.........................................................................................- 169 -显示一个打印对话框..............................................................................................- 172 -通过提供打印机句柄优化打印..............................................................................- 173 - 附录:GDI+ 参考..................................................................................................................- 176 -序言目标Microsoft Windows GDI+是为C/C++开发者提供的一个基于类的应用程序编程接口(API)。
第5章 GDI+GDI+(Graphics Device Interface Plus 图形设备接口加)是Windows XP 和Windows Server 2003操作系统的图形子系统,也是.NET 框架的重要组成部分和窗体绘图的主要工具,负责在屏幕和打印机上绘制图形图像和显示信息。
顾名思义,GDI+是Windows 早期版本所提供的图形设备接口GDI 的后续版本。
GDI+是一种应用程序编程接口(API),分别通过一套C++类和一套部署为托管代码的类来展现,这两套类分别被称为GDI+的“C++封装”和“托管类接口”。
GDI+不但在功能上比GDI 要强大很多,而且在代码编写方面也更简单,因此会很快成为Windows 图形图像程序开发的主要工具。
本章将介绍GDI+的特点和新增功能,以及GDI+ API 的具体使用方法,包括二维矢量图形的绘制、图像处理的应用、以及文字的显示等。
由于本章内容较多,有些章节不作为基本要求,用*号表示的章节是可选的。
5.1 概述GDI+与GDI 一样,都具有设备无关性。
而且GDI+是建立在GDI 之上的一种高层接口,供Windows 应用程序和.NET 框架调用。
参见下图:GDI+的体系结构本节首先介绍GDI+的几个主要新增的特性及其功能,然后说明它给Windows 图形图像程序的开发模式带来的变化,最后给出一个代码实例,介绍如何在VC++中使用GDI+进行程序开发。
1.GDI+的功能GDI+主要提供了以下三种功能:1)二维矢量图形与MFC中代表GDI的CDC和CGDIObject的诸派生类(CPen、CBrush、CFont等)类似,GDI+的Graphics等类也提供绘制各种二维矢量图形(如直线、折线、矩形、椭圆、多边形等)的功能。
而且GDI+还增加了许多新的特性和功能,如无当前状态的绘图模式、含透明成分(α混色)的颜色类Color、图案笔、颜色可渐变的刷、贝塞尔和样条曲线、持久的路径、可伸缩的区域、功能强大的矩阵和变换等等。
易语言gdi函数易语言(EPL)是一种针对中国开发者设计的可visua l基础级别的编程语言。
它提供了一系列的GDI(图形设备接口)函数,用于在图形窗口中进行图形和界面的绘制。
以下是一些常用的易语言GDI 函数:1. 创建图形窗口:```eplWnd_Create(0, "窗口标题", 0, 0, 800, 600, 0)```这个函数用于创建一个窗口,指定窗口的标题、位置和大小。
2. 创建画布:```eplhdc = CreateDC(800, 600)```通过CreateDC 函数创建一个画布,指定宽度和高度。
3. 绘制文本:```eplTextOut(hdc, 100, 100, "Hello, World!", "宋体", 20, RGB(255, 0, 0))```使用TextOut 函数在指定位置绘制文本,指定字体、大小和颜色。
4. 绘制直线:```eplLine(hdc, 200, 200, 400, 400, RGB(0, 0, 255))```使用Line 函数绘制一条直线,指定起点和终点的坐标以及颜色。
5. 绘制矩形:```eplRectangle(hdc, 300, 300, 500, 500, RGB(0, 255, 0), RGB(255, 255, 0))```使用Rectangle 函数绘制一个矩形,指定左上角和右下角的坐标,以及边框和填充颜色。
6. 绘制圆形:```eplEllipse(hdc, 100, 100, 300, 300, RGB(255, 0, 255), RGB(0, 255, 255))```使用Ellipse 函数绘制一个圆形,指定左上角和右下角的坐标,以及边框和填充颜色。
这只是一小部分易语言中可用的GDI 函数。
根据实际需求,你可能需要查阅易语言的相关文档以获取更多详细的信息。
在易语言的开发环境中,你可以通过帮助文档或自动补全功能查看所有可用的GDI 函数和参数。
第8章 GDI编程1-绘图GDI(Graphics Device Interface,图形设备接口)是Windows操作系统的传统图形子系统,负责与设备无关的图形绘制,Win32 API为应用程序提供了丰富的绘图函数和功能,MFC对它们进行了C++类封装,参见图8-1。
图8-1 GDI与Windows操作系统(其中彩色部分为操作系统)于1985年11月推出的,新式GDI+则是随Windows XP于2001年10月推出的GDI的改进版,增加了α混色、渐变画刷、样条曲线、矩阵变换、图像处理、持久路径等新功能。
随Windows Vista及.NET框架于2006年11月又推出了基于DirectX和.NET框架的全新图形子系统WPF(Windows Presentation Foundation,视窗显示/展现基础),它统一了桌面和浏览器等客户端应用程序的图形界面,采用XAML声明式编程,将用户界面的设计和编程彻底分离开来,是Windows的下一代GUI显示系统。
本书从第8章到第11章,将详细讨论如何使用GDI进行传统的Windows图形编程,包括绘图、文字、图像、动画、图标、图元文件和打印等内容。
GDI+是建立在GDI之上的,计划在第14和15章中作简单介绍。
WPF则是以.NET框架为基础的,准备在第19上和20章中再加以讨论。
在MFC应用程序中,绘图一般在视图类的(屏幕/打印机)绘图消息响应函数OnDraw 中进行,例如:void CDrawView::OnDraw(CDC* /*pDC*/) {CDrawDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if (!pDoc)return;// TODO: 在此处为本机数据添加绘制代码}每次需要重绘窗口时(如程序启动、窗口大小改变、全部或部分窗口重现、程序员调用函数RedrawWindow 或Invalidate/UpdateWindow ),应用程序框架都会调用此CWnd 消息响应成员函数(的覆盖)来绘制窗口客户区。
gdi+ 原理GDI(Graphics Device Interface)是Windows操作系统中用于图形输出的接口。
它是Microsoft公司开发的一种图形处理标准,用于在Windows操作系统中实现各种图形设备和应用程序的图形输出。
在计算机科学中,GDI是一种非常常见的图形编程接口,它提供了一种方便的方式来访问各种图形设备和应用程序中的图形数据。
一、GDI的组成GDI主要由以下几个部分组成:1. 设备上下文(DC):设备上下文是GDI中的一个重要概念,它代表了一个特定的输出设备,如屏幕、打印机等。
在GDI中,设备上下文包含了与输出设备相关的各种信息,如分辨率、颜色格式等。
2. 画笔(Pen):画笔是GDI中的一个工具,它允许开发者在设备上下文中绘制各种形状和线条。
画笔包含了颜色、宽度、样式等属性。
3. 刷子(Brush):刷子是GDI中的另一个工具,它允许开发者在设备上下文中绘制填充。
刷子包含了颜色、粗细等属性,以及一个位图来表示实际的填充图案。
4. 字体(Font):字体是GDI中用于文本输出的一个重要概念。
开发者可以通过指定字体、大小、样式等属性来输出文本。
5. 区域(Region):区域是GDI中的一个概念,它允许开发者对设备上下文中的某个区域进行操作,如绘制、剪裁等。
区域由一组路径和形状组成,可以通过GDI的API进行操作。
二、GDI的工作原理GDI通过调用各种绘图函数来操作设备上下文,从而实现图形的输出。
这些绘图函数包括画线、填充、文本输出等。
开发者可以通过GDI提供的API来创建、使用和管理这些绘图函数。
GDI的工作原理可以分为以下几个步骤:1. 创建设备上下文:开发者首先需要创建一个设备上下文对象,指定输出设备的属性,如分辨率、颜色格式等。
2. 创建画笔和刷子对象:根据需要,开发者可以创建画笔和刷子对象,并设置它们的属性。
3. 调用绘图函数:开发者通过调用GDI提供的绘图函数,将画笔和刷子应用到设备上下文中,从而实现图形的输出。
GDI编程GDI编程一、GDI相关概念1、 GDI(Graphics Device Interface):图形设备接口,是一个应用程序与输出设备之间的中介。
它提供了一套函数库,这些函数在不同的输出设备上输出图形和文字。
一方面,GDI向应用程序提供一个与设备无关的编程环境,另一方面,它又以设备相关的格式和具体的设备打交道。
2、DC (Device Context):设备描述表(设备上下文),是一种Windows数据结构,包括了如线的宽度和颜色、刷子的样式和颜色、字体、剪裁区域等信息。
用于表达显示器、打印机等设备。
DC的主要作用是进行绘图和输出文字,如绘制线条、形状和文本等,具体如dc.MoveTo(),dc.LineTo(),dc.Ellipse(),dc.FillRect(),dc.FillSolidRect(),dc.TextOut()等。
Win32下与HDC相关的函数有:GetDC(), BeginPaint()/EndPaint(),GetWindowDC()等对应的MFC版本的类有:CDC, CPaintDC, CClientDC, CWindowDC等3、GDI对象:DC定义了一组GDI对象,包括画笔,画刷,字体,位图,调色板,剪裁区域,路径层(Path)。
他们有Win32和MFC两套实现版本,其对应关系如下:4、DC与GDI对象之间的关系:GDI对象是通过DC发生作用的,要使用这些GDI对象,可以使用Win32函数SelectObject来将其选入DC中,如::SelectObject(hdc, hPen);5、利用DC和GDI对象绘图的完整步骤为:(1). 获取或者创建一个DC(2). 获取或者创建一个GDI对象(Pen, Brush等)(3). 使用dc.SelectObject函数把GDI对象选入DC(4). 使用DC进行绘图或文字输出(5). 恢复DC原来的GDI对象并删除刚新创建的GDI对象,如pen.DeleteObject()(6). 释放或删除设备描述表DC其中,(1)和(6),(2)和(5)是成对出现的。
VFP用GDI+画图写字*----------------------------* 使用 GDI+ 庫繪圖範例* 打開 VCX 文件可以查看類庫源代碼*----------------------------*----------------------------* VFP 9.0(SP2) 自帶GDI+類庫* 文件名:_GDIplus.vcx, _GDIplus.vct (若使用頭文件,有GDIplus.h, GDIplus_locs.h)* 路徑:VFP 安裝目錄下 FFC 文件夾*----------------------------SET PATH TO HOME() + "FFC"_Bitmap = NEWOBJECT("gpBitmap", "_GDIplus.vcx") && 建立繪圖板對象,圖形將在此畫板上繪製WITH _Bitmap.Create(128,128) && 設定畫板大小,寬度和高度.SetResolution(300,300) && 設定分辨率(x,y 的 DPI 値)ENDWITH_Color = NEWOBJECT("gpColor", "_GDIplus.vcx") && 建立顔色對象_Pen = NEWOBJECT("gpPen", "_GDIplus.vcx") && 建立畫筆對象_Font = NEWOBJECT("gpFont", "_GDIplus.vcx") && 建立字體對象_StringFormat = NEWOBJECT("gpStringFormat","_GDIplus.vcx")_TextBrush = NEWOBJECT("gpSolidBrush", "_GDIplus.vcx") _Point = NEWOBJECT("gpPoint", "_GDIplus.vcx")_Graphics = NEWOBJECT("gpGraphics", "_GDIplus.vcx") && 建立圖形對象WITH _Graphics.CreateFromImage(_Bitmap) && 指定圖形對象的設備,此處指向已建立的_Bitmap對象_Color.Set(255,255,255) && 設定顔色,三個參數分別是紅、緑、藍値,即RGB各自獨立.Clear(_Color) && 用設定的顔色填充整個圖形,可用於背景顔色_Color.Set(0,0,0) && 改變顔色_Pen.Create(_Color, 10) && 將指定的顔色賦予畫筆,請查看類庫中gpPen對象Create方法的參數,此處10是筆寬.DrawLine(_Pen, 20, 20, 108, 20) && 用設定的畫筆畫圖,類庫中有很豐富強大的畫圖函數.DrawLine(_Pen, 20, 50, 108, 50)_Color.Set(0,255,0)_Font.Create("方正综艺_GBK", 10, 0, 3)&& 設置文本字體_TextBrush.Create(_Color) && 設定文本顔色_Point.Create(1, 80) && 設定文本左上角位置.DrawStringW(STRCONV("測試", 5), _Font, _Point, _StringFormat, _TextBrush)ENDWITH_Bitmap.SaveToFile("Test.bmp","image/bmp") && 將繪圖板保存爲文件,此處指定文件格式爲.BMPRELEASE ALLRETURN如果你不用Project項目,在SET PATH後加一行:SET CLASSLIB TO _GDIplus使用Windows中文字库的时候,最好使用所示那样的带W的函数,要用strconv()转换为Unicode编码,函数的参数是5。
gdi+ image 使用方法GDI+是一种用于图形绘制和图像处理的API,它在Windows 操作系统上提供了强大的图形处理功能。
要使用GDI+处理图像,可以按照以下步骤进行操作:1. 导入命名空间:必须导入System.Drawing和System.Drawing.Imaging命名空间,才能使用GDI+相关类和方法。
```csharpusing System.Drawing;using System.Drawing.Imaging;```2. 创建一个Bitmap对象:Bitmap是一个表示图像数据的类,可以用于创建、操作和保存图像。
```csharpBitmap image = new Bitmap("image.jpg");```3. 使用Graphics对象进行绘图:Graphics是一个用于绘制图形和文本的类,可以对Bitmap对象进行绘制操作。
```csharpGraphics graphics = Graphics.FromImage(image);// 在图像上绘制图片、文本等```4. 保存或显示图像:可以使用Bitmap对象的Save方法将图像保存到文件中,也可以使用Graphics对象的DrawImage方法在窗口或控件上显示图像。
```csharpimage.Save("output.jpg", ImageFormat.Jpeg);// 或者pictureBox.Image = image;```除了绘图和显示图像外,GDI+还提供了丰富的图像处理功能,例如调整图像大小、旋转图像、应用滤镜效果等。
可以使用Graphics对象和Image类的相关方法和属性来实现这些功能。
需要注意的是,GDI+在处理图像时可能会占用大量的系统资源,如果处理大图像或大量图像,应该小心管理资源,避免出现性能问题。
【Windows编程】系列第五篇:GDI图形绘制上两篇我们学习了以及,知道如何⽤常见Win32输出⽂本字符串,这⼀篇我们来学习Windows编程中另⼀个⾮常重要的部分GDI图形绘图。
Windows的GDI函数包含数百个API可供我们使⽤,本篇把最常⽤的GDI绘图做⼀个讲解。
GDI可以绘制点、直线曲线、填充封闭区域、位图以及⽂本,其中⽂本部分已经在上⼀篇中将了,请参考。
跟前⾯的GDI对象⼀样,本篇的这些绘图函数也必须要设备上下⽂句柄(HDC)作为函数参数,从前⽂我们知道,HDC可以在处理WM_PAINT的时候⽤BeginPaint函数获取,也可以从GetDC、GetWindowDC拿到。
既然是画图,就少不了颜⾊的描述,Windows中的颜⾊有⼏种表⽰,其中COLORREF在GDI绘制中⽤的最多,它实际上是⼀个⽆符号32为整型。
其中红、绿、蓝各占⼀个字节,最⾼字节不使⽤,如下图所⽰:该值可以⽤Windows提供的RGB宏来⽣成,Windows中RGB的定义为:#define RGB(r,g,b) ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)(b))<<16)))除此之外,Windows还有结构体RGBQUAD也表⽰颜⾊,这种⼀般⽤于位图结构信息中。
画像素点Windows提供了SetPixel和GetPixel函数来设定和获取像素点的颜⾊。
函数原型为:COLORREF SetPixel(HDC hdc, int X, int Y, COLORREF crColor);COLORREF GetPixel(HDC hdc, int nXPos, int nYPos);该函数并不常使⽤。
画笔画刷在图形绘制之前,可以创建画笔给后续的画图使⽤,创建画笔的API函数为:HPEN CreatePen(int fnPenStyle, int nWidth, COLORREF crColor);HBRUSH CreateSolidBrush(COLORREF crColor);HBRUSH CreatePatternBrush(HBITMAP hbmp);HBRUSH CreateHatchBrush(int fnStyle, COLORREF clrref);它可以指定画笔风格,宽度和颜⾊。
第13章 GDI+高级编程*本章介绍GDI+的路径、区域、变换、图像处理和图元文件等高级编程内容。
路径由许多不同类型的点所构成,用于表示复杂的不规则图形。
区域是由矩形、椭圆、多边形等几何形状组合构成的一种封闭图形,可用于复杂图形的绘制、剪裁和击中测试等。
Graphics类可对绘制的图形进行平移、旋转和伸缩变换。
矩阵类Matrix则可用于图形、图像、颜色、路径、区域等对象的变换。
GDI+的图像处理功能强大,可以加载、保存和操作多种格式的图像。
GDI+的图元文件格式为EMF+,可用来保存和重放绘图记录,也能用于交互绘图的重绘操作。
13.1 路径路径(path)是一系列相互连接的直线和曲线,由许多不同类型的点所构成,用于表示复杂的不规则图形,也叫做图形路径(graphics path)。
路径可被以画轮廓和填充的形式显示输出,也可以用于创建区域和路径渐变刷等。
虽然在GDI中也有路径(本课件未讲),但是它只是作为DC的一种状态才能存在。
独立的路径对象,则是GDI+新增加的。
13.1.1 图形路径在GDI+中,路径由图形路径类GraphicsPath表示,它是GDI+基类GdiplusBase的直接派生类。
1.构造函数GraphicsPath类有三个构造函数:GraphicsPath(FillMode fillMode = FillModeAlternate); // 构造一个空路径GraphicsPath(const Point *points, const BYTE *types, INT count, FillMode fillMode = FillModeAlternate); // 构造含指定整数型点数组的路径GraphicsPath(const PointF *points, const BYTE *types, INT count, FillMode fillMode = FillModeAlternate); // 构造含指定浮数型点数组的路径其中:●填充模式参数fillMode在上一章的画填充多边形和曲线时已经讲过,枚举类型FillMode除了可取这里的默认值FillModeAlternate(交替填充模式)之外,还有一个可取的值是FillModeWinding(环绕替填充模式)。