河北网络_GDI+绘图入门
GDI GDI 从入门到精通-第一讲资料
} PAINTSTRUCT;
7
通过CreateCompatibleDC 创建兼容内存DC 通过调用CreateCompatibleDC函数来创建与目标DC兼容的内 存DC。一般用于解决界面的闪烁问题。 代码片段: { HDC hMemDC = ::CreateCompatibleDC(hDest); //其他的绘图操作代码 … ::BitBlt(hDest,x,y,w,h,hMemDC,0,0,SRCCOPY); … ::DeleteDC(hMemDC); }
23
Bitmap的结构
BMP文件总体上由4部分组成,分别是位图文件头、位图信息 头、调色板和图像数据。
24
Bitmap的结构
位图文件头包含了图像类型、图像大小、图据存放地址和两个保 留未使用的字段。 typedef struct tagBITMAPFILEHEADER { WORD bfType; //图像类型 DWORD bfSize; //图像大小 WORD bfReserved1; //保留未使用的字断 WORD bfReserved2; //保留未使用的字断 DWORD bfOffBits; //图像数据存放地址 } BITMAPFILEHEADER
4
通过GetDC函数 来获得相应窗口的HDC
GetDC函数适合在窗口现有图形的基础上进行绘制。 代码段: { HDC hDC = ::GetDC(hWnd); //其他的绘图操作代码 …… ::ReleaseDC(hWnd,hDC); } GetDC中传入的参数hWnd是窗口的句柄,它返回和这个窗口相关的DC
//亮灰色画刷
//灰色画刷 //暗灰色画刷 //黑色画刷 //空画刷
#define HOLLOW_BRUSH
GDI+绘图入门
使用字体
GraphicsUnit枚举类型,用于指定给定数据的度量单位。
Display,将 1/75 英寸指定为度量单位。 Document,将文档单位(1/300 英寸)指定为度量单位。 Inch,英寸。 Millimeter,毫米。 Pixel,设备像素。 Point,打印机点(1/72 英寸)。 World,通用单位。 Bold:设置字体风格为粗体; Italic:设置字体风格为斜体; Regular:常规字体; Strikeout:字体带删除线; Underline:字体带下划线。
Graphics对象
Graphics类提供的许多绘图方法有:
Clear方法:使用一种指定的颜色填充整修绘图表面。 例如,
Graphics^ g = this->CreateGraphics; g->Clear( this->BackColor ); //用当前控件的背景色填 充
绘制方法,一般都有多个重载,第一个参数一般都是 绘制画笔Pen类型:
包含的一些方法
Contains方法:确定一个矩形或一个点是否在当前矩形区域 内。参数类型可以是Point结构,Rectangle结构和点坐标值。 Union方法:求两个矩形的并集。参数是两个要求并集的矩形, 返回一个包含其并集的Rectangle结构。
Rectangle结构
Intersect方法:求两个矩形的交集。参数为两个求交的矩形, 则返回一个表示其交集的Rectangle结构;参数为一个矩形, 则获得当前矩形与参数矩形的交集Rectangle,用这个结果替 换当前矩形。
可以直接对Rectangle变量进行等于==或不等于!=操作。 正在绘制或操作一个控件的工作区时,常常使用Rectangle 结构。
GDI绘图基本步骤总结
GDI绘图基本步骤总结一、获得绘图的窗口句柄方法(详细参数及其调用可以看考MSDN):1、HWND FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName)HWND FindWindowEx(HWND hwndParent, HWND hwndChildAfter,LPCTSTR lpClassName, LPCTSTR lpWindowName)2、HWND WindowFromPoint(POINT& Point)3、BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam)BOOL CALLBACK EnumChildWindows(HWND hWndParent, WNDENUMPROC lpEnumFunc,LPARAM lParam)BOOL CALLBACK EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam) BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)二、由窗口句柄得到设备环境句柄HDC方法:BeginPaint、GetWindowDC、GetDC。
这些函数都需要步骤一中的HWND的句柄。
调用这些函数后要释放句柄,相应的有EndPaint、ReleaseDC进行清理。
1、采用BeginPaint获取HDCHDC hdc;PAINTSTRUCT ps;// 保存hdc = ::BeginPaint( hwnd, &ps );// 此处添加绘图代码::EndPaint( hwnd, &ps );说明:获得的hdc的有效区域仅限于客户区无效区域的设备环境句柄,不包括标题栏、边框等。
2、采用GetWindowDC获取HDCHDC hdc = ::GetWindowDC( hwnd );// 此处添加绘图代码::ReleaseDC( hwnd, hdc );说明:绘制区域是整个窗口(边框、标题栏、客户区的总和)。
GDI与绘图.ppt
• MoveToEx (hdc, xBeg, yBeg, NULL) ; • LineTo (hdc, xEnd, yEnd) ;
• Polyline(hdc, pt[],n);
曲线及多边形绘制函数
Function Arc PolyBezier Polyline
PolylineTo PolyPolyline
利用选择的绘图工具绘图 恢复原来的绘图工具并删
除选择的绘图工具
释放设备环境句柄
绘图示例1
case WM_PAINT: //获取设备环境句柄 hdc = BeginPaint (hwnd, &ps) ; //获取绘图工具 hpen=(HPEN)GetStockObject(BLACK_PEN); //选择绘图工具 SelectObject(hdc,hpen); //利用选择的绘图工具绘图 Ellipse(hdc,100,100,300,300); //释放设备环境句柄 EndPaint (hwnd, &ps) ;
Description Draws an elliptical arc. Draws one or more Bézier curves. Draws a series of line segments by
connecting the points in the specified array. Draws one or more straight lines. Draws multiple series of connected line segments.
填充式绘制函数
▪ Rectangle 画矩形。 ▪ Ellipse 画椭圆。 ▪ RoundRect 画带圆角的矩形。 ▪ Pie 画椭圆的一部分,使其看起来像一个
使用GDI+绘图
第33章使用GDI+绘图在本书中,有8章内容介绍用户交互和.NET Framework,第31章主要介绍了如何显示对话框或SDI、MDI窗口,以及如何把各种控件放在这些窗口上,如按钮、文本框和列表框。
第32章介绍在Windows窗体中使用许多Windows窗体控件处理各种数据源中的数据。
这些标准控件的功能非常强大,使用它们就可以获得许多应用程序的完整用户界面。
但是,有时还需要在用户界面上有更大的灵活性。
例如,要在窗口的确定位置以给定的字体绘制文本,或者显示图像,但不使用图像框控件,只使用形状和图形。
这些都不能使用第31章介绍的控件来完成。
要显示这种类型的输出,应用程序必须直接告诉操作系统需要在其窗口的什么地方显示什么内容。
本章主要介绍如何绘制以下内容:●绘图规则●直线、简单图形● .BMP图像和其他图像文件●文本●处理打印在这个过程中,还需要使用各种帮助对象,包括钢笔(用于定义直线的特性)、画笔(用于定义区域的填充方式)和字体(用于定义文本字符的图形)。
我们还将介绍设备如何解释和显示不同的颜色。
下面首先讨论GDI+技术。
GDI+由.NET基类集组成,这些基类可用于在屏幕上完成定制绘图,能把合适的指令发送到图形设备的驱动程序上,确保在监视器屏幕上显示正确的输出(或打印到硬拷贝中)。
33.1 理解绘图规则本节讨论一些基本规则,只有理解了它们,才能开始在屏幕上绘图。
首先概述GDI,GDI+技术就建立在GDI上,然后说明它与GDI+的关系。
接着介绍几个简单的例子。
33.1.1 GDI和GDI+一般来说,Windows的一个优点 (实际上是现代操作系统的优点) 是它可以让开发人员不考虑特定设备的细节。
例如,不需要理解硬盘设备驱动程序,只需在相关的.NET类中调用合适的方法(在.NET推出之前,使用等价的Windows API函数),就可以编程读写磁盘上的文件。
这个规则也适用于绘图。
计算机在屏幕上绘图时,把指令发送给视频卡。
第9章GDI 绘图
7
9.2 创建Graphics对象
• • • • • 创建Graphics的基本语法如下: Dim g As Graphics g = 控件(或窗体).CreateGraphics 第一行声明了一个Graphics对象g; 第二行调用要绘图的控件(或窗体)的CreateGraphics() 方法获取对Graphics对象的引用。 • 通过以上两条语句,就可以在该控件或窗体的表面进行绘 图了。
8
• 例9.1 创建简易小画板应用程序,通过调用PictureBox1 的CreateGraphics方法来演示Graphics对象的创建。 • 具体操作过程: • ⑴ 新建项目,选择“Windows应用程序”,项目名为 “简易小画板”。 • ⑵ 在解决方案资源管理器中,把“Form1.vb”改名为 “frmGDIDemo.vb”。 • ⑶ 打开窗体设计视图,选择窗体,在属性框中修改窗体 属性:Name属性改为“frmGDIDemo”;StartPosition 属性改为“CenterScreen”;Text属性改为“简易小画 板”。
说明 提供基本的图形功能,包括表面绘图、图象、颜 色、笔刷、钢笔和字体 提供高级光栅和矢量图形功能 提供高级图象功能,其底层的基本功能是在 System.Drawing命名空间提供 提供打印和打印预览功能 提供高级字体功能,其基本功能在 System.Drawing命名空间中提供 提供的功能可增强对自定义控件的设计时支持, 5 包括开发定制
20
• 例9.3 演示了如何引用Paint事件的PaintEventArgs中的 Graphics对象。具体操作为:双击Form1窗体,输入以 下代码: • Private Sub Form1_Paint(ByVal sender As Object, _ • ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint • Dim g As Graphics = e.Graphics • g.DrawString("欢迎进入GDI+的绘图世界!", New Font("宋体", 12), Brushes.Red, 2的基本过程同日常作画类似,基本步骤如 下: • 第一步:选择要绘图的窗体或者控件,并创建其 Graphics对象,也就是选好画布; • 第二步:选择绘图的工具(Pen对象、Brush对象等); • 第三步:调用Graphics对象的适当方法(DrawLine、 DrawString、DrawImage等)进行绘图; • 第四步:调用Graphics对象的Dispose方法释放 Graphics对象占用的内存。
第13章 GDI 绘制图形.ppt
13.1 GDI+概述
在.NET框架中,已经提供了一些关于GDI+绘图的方法, 这些方法主要保存在System.Drawing命名空间中。Graphics类 是最基础的绘图类,所有的图形都是在Graphics对象上呈现出 来的。
13.1.1 Graphics对象
Graphics类封装一个GDI+绘图图面。Graphics对象表示 GDI+绘图表面,是用于创建图形图像的对象。绘图时需要先 创建Graphics对象,然后才可以使用GDI+绘制线条和形状、 呈现文本或显示与操作图像。绘制图形包括两个步骤。
(1)创建Graphics对象。 (2)使用Graphics对象绘制线条和形状、呈现文本或显 示与操作图像。
13.2.1 使用钢笔Pen类绘制图形
Pen类的主要作用正如其中文名称所讲,起到一个画笔 的作用,主要用于绘制线条,或者用线条组合成的其他几何 形状。
13.2.1 使用钢笔Pen类绘制图形
13.3.2 使用画笔Brush类绘制图形
钢笔Pen类绘制的,都是一些空心的、内部没有被填充颜 色的图形。Brush类绘制的图形则是实心的、内部已经填充了 颜色图形。所以,常常使用画笔Brush类来填充图形区域。
13.2.6 绘制贝塞尔曲线
贝塞尔曲线是计算机图形图像造型的基本工具,是图形造型 运用得最多的基本线条之一。它通过控制曲线上的四个点(起始 点、终止点以及两个相互分离的中间点)来创造、编辑图形。其 中起重要作用的是位于曲线中央的控制线。这条线是虚拟的,中 间与贝塞尔曲线交叉,两端是控制端点。移动两端的端点时贝塞 尔曲线改变曲线的曲率(弯曲的程度);移动中间点(也就是移 动虚拟的控制线)时,贝塞尔曲线在起始点和终止点锁定的情况 下做均匀移动。
第12章 GDI+绘图技术
简介
GDI+ ( Graphics Device Interface plus )是 Windows 中的一个子系 统,它主要负责在显示屏幕和打印设备输出有关信息。顾名思义, GDI+是以前版本GDI的继承者,出于兼容性考虑,后续Windows仍然支 持以前版本的 GDI ,但是在开发新应用程序的时候,开发人员为了满 足图形输出需要应该使用GDI+,因为GDI+对以前的Windows版本中GDI 进行了优化,并添加了许多新的功能。
创建Pen对象
Pen类主要用于绘制线条,或者线条组合成的其他几何形状。Pen类的 构造函数如下。 语法: public Pen (Color color,float width) •color:设置Pen的颜色。 •width:设置Pen的宽度。
技巧:可以通过设置画笔的CustomStartCap属性和CustomEndCap属性来 为直线添加线帽。
参数 pen x1 y1 x2 y2 说明 Pen对象,它确定线条的颜色、宽度和样式 第一个点的x坐标 第一个点的y坐标 第二个点的x坐标 第二个点2)
2.绘制矩形 通过Graphics类中的DrawRectangle方法,可以绘制矩形图形。该方法可 以绘制由坐标对、宽度和高度指定的矩形。 语法: public void DrawRectangle (Pen pen,int x,int y,int width,int height) DrawRectangle方法的参数说明如表所示。
基本图形绘制
1、GDI+中的直线和矩形 2、GDI+中的椭圆、弧和扇形 3、GDI+中的多边形
GDI+中的直线和矩形(1)
GDI编程-绘图
第8章 GDI编程1-绘图详细介绍了GDI绘图,希望对你有帮助:GDI(Graphics Device Interface,图形设备接口)是Windows操作系统的传统图形子系统,负责与设备无关的图形绘制,Win32 API为应用程序提供了丰富的绘图函数和功能,MFC对它们进行了C++类封装,参见图8-1。
图8-1 GDI与Windows操作系统(其中彩色部分为操作系统)传统GDI是随Windows 1.0于1985年11月推出的,新式GDI+则是随Windows XP于2001年10月推出的GDI的改进版,增加了α混色、渐变画刷、样条曲线、矩阵变换、图像处理、持久路径等新功能。
随Windows Vista及.NET框架3.0微软于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 消息响应成员函数(的覆盖)来绘制窗口客户区。
WIN32编程入门之GDI绘图
等
GDI的画刷—创建画刷
使用创建的画刷: HBRUSH hBrush,oldBrush;
hBrush = CreateHatbrush(HS_CROSS, RGB(255,0,0));
oldBrush = (HBRUSH)SelectObject(hdc, hBrush);
GID 绘图函数调用;
SelectObject(hdc, oldBrush); //恢复原来的画笔 DeleteObject(hdc, hBrush);
GDI的画刷—创建画刷
HBRUSH CreateSolidBrush ( COLORREF crColor // 画刷颜色 ); 创建一个单颜色的画刷,即填充区域内使用单一指定的颜色填 充 HBRUSH CreateHatchBrush ( int fnStyle, // 线条的图案方式 COLORREF crColor // 线条颜色 ); fnStyle可选参数值: HS_VERTICAL HS_DIAGONAL HS_CROSS
GDI基本图形—矩形
BOOL Rectangle ( HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect ); // 设备句柄 // 包围矩形的左上角x坐标 //包围矩形的左上角x坐标 //包围矩形的右下角x坐标 //包围矩形的右下角y坐标
设备上显示的图形型态本身可以被分为几类: •直线和曲线 线条是所有向量图形绘制系统的基础。GDI支持 直线、矩形、椭圆(包括椭圆的子集,也就是我们所说的 「圆」)、椭圆圆周上的部分曲线即所谓的「弧」以及贝塞尔 曲线(Bezier spline)。所有更复杂的曲线可由折线(polyline) 代替,折线通过一组非常短的直线来定义一条曲线。线条用设 备内容中选中的目前画笔绘制。
GDI GDI 从入门到精通-第二讲资料
15
LOGFONTA字体结构体
BYTE lfItalic; //如果要求的字体是倾斜的,则此参数 为TRUE BYTE lfUnderline; //如果要求的字体要加下划线,则此参 数为 TRUE BYTE lfStrikeOut; //如果字体要加中划线,则此参数 TRUE BYTE lfCharSet; //指定字体所要求的字符集 BYTE lfOutPrecision; //指定所要求的输出精度。输出精度 定义了输出字体必须如何紧密匹配所要求的字体的高度、宽度、字符 转角、倾斜度和间距
• HFONT WINAPI CreateFontIndirectA( __in CONST LOGFONTA *lplf); • HFONT WINAPI CreateFontIndirectW( __in CONST LOGFONTW *lplf); • 根据字体结构体创建字体。
12
CreateFontIndirect创建字体
位图的销毁是调用DeleteObject函数。 ::DeleteObject(hbmpBack);
6
BitBlt绘制位图
BOOL WINAPI BitBlt ( HDC hdc, //目标DC的句柄
int x, int y, int cx, int cy,
HDC hdcSrc, int x1,int y1,
3
LoadImage图片的加载
LoadImage这个函数可以加载位图、图标、光标多种图像数据。
从资源加载
hbmpBack = (HBITMAP) ::LoadImage (hInst,MAKEINTRESOURCE (IDB_BACK),IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS);
GDI GDI 从入门到精通第五讲资料PPT课件
15
Bitmap的结构
BMP文件总体上由4部分组成,分别是位图文件头、位图信息 头、调色板和图像数据。
16
Bitmap的结构
位图文件头包含了图像类型、图像大小、图据存放地址和两个保 留未使用的字段。
4
DC的偏移
DC的偏移就是设置DC绘制的起点坐标位置。默认情况下,DC的 绘制起点坐标是在DC左上角的(0,0)位置。
如果我们把这个起点坐标修改了,假如修改成(100,200),那以 后往这个DC绘制时,就默认以(100,200)为起点坐标。这时,如果编 写TextOut(hdc, 0, 0, ...),就会把字符串绘制在(100,200)上面;如果 编写TextOut(hdc, -100, -200, ...),就会把字符串绘制在(0,0)上面。
10
获取位图的像素颜色数据
GetBitmapBits(HBITMAP hbit, LONG cb, LPVOID lpvBits); 参数hbit就是要获取像素颜色数据的位图句柄。 参数lpvBits就是要接收位图像素颜色数据的缓冲区。 参数cb就是缓冲区lpvBits的大小。
11
CreateDIBSection创建位图
3
DC的剪辑
要剪辑的区域,不一定要是矩形区域,也可以是圆角矩形区域, 也可以是圆形区域等。比如:
CreateRectRgn(int x1, int y1, int x2, int y2);就是创建矩形区域, CreateRoundRectRgn(int x1,int y1,int x2,int y2,int w,int h)就是创 建圆角矩形区域, CreateEllipticRgn(int x1, int y1, int x2, int y2);就是创建圆形区域。
第5课 GDI+图形绘制
包含了绘图的基本方法,例如直线、矩形等。 绘图时必须建立Graphice对象 处理图形的轮廓部分 对图形进行填充处理 字体功能,例如字体样式、旋转等 处理图形的各种结构,例如Point、Rectangle
Graphics对象
在.NET框架的Windows窗体中则使用绘图对象进行绘图操作。 使用System.Drawing命名空间中的Graphics类封装GDI+的绘 图对象,在Windows窗体中的所有绘图操作(包括显示文字)都必 须通过这个类来进行。 要使用Graphics进行绘图,首先必须获得它的对象实例或是创建一 个Graphics对象。最常用的方法是可以通过窗体的Paint事件来获 取对象实例,创建对象则通过CreateGraphics方法。
Rectangle结构
保存一个矩形区域的位置和大小,包含有X、Y、Width、Height、Size属性, 还有Top、Bottom、Left、Right等属性返回各边坐标值。 Rectangle的初始化
指定一个Point值和Size值,如 Rectangle c = new Rectangle( point1,size1); 直接指定矩形位置、宽度和高度值,前两个参数指定了矩形左上角的XY坐标值,后 两个参数指定矩形的宽度和高度。如 Rectangle d = new Rectangle( left1, top1, width1, height1)
功能描述
绘制圆弧 椭圆轮廓线 扇形轮廓线 多边形轮廓线 绘制矩形线
绘图函数
DrawLine FillEllipse FillPie FillPolygon FillRectangle
功能描述
绘制直线 填充椭圆区域 填充扇形区域 多边形区域 矩形区域
WindowsGDI绘图基础与轻量进阶
WindowsGDI绘图基础与轻量进阶/cpp/html/2953.htmlGDI 是 Graphics Device Interface 的缩写,称为图形设备接口,主要用来绘图,由动态链接库 GDI32.DLL 提供支持。
GDI 就是一个函数库,提供了很多绘图函数(也就是GDI32.DLL 中的导出函数),上节使用的 TextOut 就是其中之一。
GDI 非常重要,不但应用程序使用它来绘图,Windows 本身也使用GDI来显示用户界面,比如菜单、滚动条、图标和鼠标指针等。
GDI 基础这一部分讲解如何绘制简单的图形,而在轻量进阶部分讲解如何美化图形。
1) 绘制矩形Rectangle 函数可以在窗口上绘制一个矩形,它的原型为:1.BOOL Rectangle(2.HDC hdc, //设备环境句柄3.int nLeftRect, //矩形左上角x坐标4.int nT opRect, //矩形左上角y坐标5.int nRightRect, //矩形右下角x坐标6.int nBottomRect //矩形右下角y坐标7.);示例代码:1.case WM_PAINT:2.hdc = BeginPaint(hwnd, &ps);3.Rectangle(hdc, 50, 50, 150, 150);4.EndPaint(hwnd, &ps);5.return 0 ;运行效果:注意:坐标的原点都是客户区的左上角。
2) 带圆角的矩形如果您觉得上面矩形过于方正,那么可以使用 RoundRect 函数,它可以画出带有圆角边框的矩形,原型为:1.BOOL RoundRect(2.HDC hdc, //设备环境句柄3.int nLeftRect, //矩形左上角x坐标4.int nT opRect, //矩形左上角y坐标5.int nRightRect, //矩形右下角x坐标6.int nBottomRect, //矩形右下角y坐标7.int nWidth, //用来画圆角的椭圆的宽度8.int nHeight //用来画圆角的椭圆的高度9.);注意:当 nHeight >= nBottomRect 且nWidth = nRightRect 时,那么绘制出的就是一个圆。
GDI+绘图基础
GDI+提供从简单到复杂图形绘制的大量方法,并且我们可以通过对路径和区域的操作构造出更复杂的图形,这在CAD等场合极为有用。
当然,在绘图之前我们有必要搞清一些基本内容,如坐标空间、画笔和画刷等。
GDI+提供从简单到复杂图形绘制的大量方法,可以通过对路径和区域的操作构造出复杂的图形GDI+提供从简单到复杂图形绘制的大量方法,并且我们可以通过对路径和区域的操作构造出更复杂的图形,这在CAD等场合极为有用。
当然,在绘图之前我们有必要搞清一些基本内容,如坐标空间、画笔和画刷等。
坐标空间及其变换在视图和窗口中绘图或定位总是在一个二维坐标系进行,依据作用方法的不同,坐标有多种表示方法,并且各种不同坐标之间可以相互转换。
1.世界坐标系、设备坐标系和页面坐标系GDI+为我们提供了三种坐标空间:世界坐标系、页面坐标系和设备坐标系。
"世界坐标系"是应用程序用来进行图形输入输出所使用的一种与设备无关的笛卡尔坐标系。
通常,我们可以根据自己的需要和方便定义一个自己的世界坐标系,这个坐标系称为用户坐标系。
例如,前面"DrawLine(&newPen, 20, 10, 200, 100);"中的坐标都是以这个用户坐标系为基准的,默认时使用像素为单位。
"设备坐标系"是指显示设备或打印设备坐标系下的坐标,它的特点是以设备上的象素点为单位。
对于窗口中的视图而言,设备坐标的原点在客户区的左上角,x坐标从左向右递增,y坐标自上而下递增。
由于设备的分辨率不同,相同坐标值的物理位置可能不同。
如对于边长为100的正方形,当显示器为640 x 480和800 x 600时的大小是不一样的。
"页面坐标系"是指某种映射模式下的一种坐标系。
所谓映射是指将世界坐标系通过某种方式进行的变换。
默认时,设备坐标和页面坐标是一致的。
2.坐标映射和坐标原点的设置为了能保证打印或显示的结果不受设备的影响,GDI+定义了一些映射方法和属性来决定设备坐标和页面坐标之间的关系。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Intersect方法:求两个矩形的交集。参数为两个求交的矩形, 则返回一个表示其交集的Rectangle结构;参数为一个矩形, 则获得当前矩形与参数矩形的交集Rectangle,用这个结果替 换当前矩形。
可以直接对Rectangle变量进行等于==或不等于!=操作。 正在绘制或操作一个控件的工作区时,常常使用Rectangle 结构。
各种系统颜色以静态属性的形式保存在这个类中,可以 直接通过类名来引用。具体系统颜色见表。
火龙果整理
使用字体
在窗体或控件中都包含有Font属性,表示窗体或控件 当前使用的字体。在窗体或控件创建时,会使用系统的 默认字体值。 字体使用Drawing::Font类封装,通过创建这么个类 的实例可以创建新的字体。
包含的一些方法
Contains方法:确定一个矩形或一个点是否在当前矩形区域 内。参数类型可以是Point结构,Rectangle结构和点坐标值。 Union方法:求两个矩形的并集。参数是两个要求并集的矩形, 返回一个包含其并集的Rectangle结构。
Rectangle结构
火龙果整理
Graphics对象
火龙果整理
填充方法,一般都有多个重载,第一个参数一般都是填充画刷 Brush类型: FillRectangle:填充矩形;第二个参数可以是一个矩形结 构或者其他可表示矩形的方式(如Point+Size)。 FillClosedCurve:填充闭合曲线; FillRegion:填充一个区域。两个参数,第一个指定填充 使用的画刷(Brush类型),第二个指定填充区域 (Region类型)。 FromImage方法:从参数指定的Image对象创建一个新的 Graphics对象。 GetHDC方法:返回与Graphics相关联的设备句柄。 ReleaseHDC方法:释放设备句柄。
掌握GDI+的基本知识 Graphics对象与Paint事件 常用的数据结构、画笔、画刷、文字与 图像的显示 参考例子GUIsample完成大作业
3
GDI+
火龙果整理
GDI+是Microsoft的新一代的二维图形系统,它 完全面向对象。GDI+包括三部分:二维矢量图形 绘制、图像处理和文字显示。要在Windows窗体 中显示字体或绘制图形必须要使用GDI+。 GDI+提供了多种画笔、画刷、图像等图形对象, 此外还包括一些新的绘图功能,如Alpha混色、渐 变色、纹理、消除锯齿以及使用包括位图在内的多 种图像格式。 GDI+使用的各种类大都包含在命名空间 System::Drawing中。
在创建时需要指定字体的名称、大小和风格,如果不指定字体 风格则将创建常规字体。 Font构造函数
下面语句创建一个12磅的粗体隶书字体。 Font^ font1 = gcnew Font(―隶书”,12, FontStyle::Bold); 下面语句使用指定的度量单位而不是磅值来创建字体 Font ^ font2 = gcnew Font(―隶书”,12, GraphiUnit::Document); 组合前两个构造函数 Font^ font3 = gcnew Font(―隶书”,12, FontStyle::Bold, GraphiUnit::Document);
颜色Color
火龙果整理
3. 通过调用FromArgb静态方法,它有4种版本。 Color sky = Color::FromArgb( 100, 200, 200, 255 ); 参数依次表示alpha成分,红,绿,蓝。 Color sky = Color::FromArgb( 200, 200, 255 ); 这里缺省了alpha成分,它隐式地设置为它的最大值,生 成一种完全不透明的颜色。 Color sky = Color::FromArgb( 100, Color::Blue ); 这里使用一个现有的Color对象实例,只是修改了alpha成 分的值。 Color sky = Color::FromArgb( 0x64C8C8FF ); 使用一个形式为AARRGGBB的组合整数。
颜色Color
火龙果整理
.NET框架中的颜色基于4种成分。除了三原色红、绿、 蓝外,还有第4种称为alpha的值用于指定颜色的透 明度。其中每个成分都是一个字节,在0~255之间 取值。 在GDI+中,用值类型Color结构来表示颜色。在类 和方法中要使用颜色的时候,它们都需要Color结构 的一个实例。Color结构中预定义了141种颜色,它 们都使用静态属性来表示。
窗体的工作区是位于标题栏(或有菜单栏)下面,且在窗体边 界内部的控件的一部分。Form类中有一个ClientRectangle 属性,用于获取工作区的位置。如, Rectangle myRect = ClientRectangle; 这里需要注意,状态栏虽然覆盖了工作区,但并没有减少工作 区的总大小。在计算一个窗体的可视区域时,要将工作区的大 小值减去状态栏的大小。
代表Windows窗体应用程序中的一个二维表面上的位 置,常用于定义窗体或控件的位置;表示一个点的坐 标值,具有以下两种属性:
X,定义Point结构的x坐标或者水平位置。 Y,定义Point结构的y坐标或者垂直位置。
初始化方法有4种
Point():空点; Point( int x, int y ):直接指定X坐标和Y坐标初始化;
其中有一种Transparent颜色,其alpha成分设置为0,表 示透明颜色
创建Color对象实例的方法
1. 创建Color实例最简单的方法就是通过一个静态属性来返 回。如,Color newColor = Color::Red; 2. 可以使用默认的构造函数来创建Color实例,但是所产生 的Color对象是纯黑色的,并且不能修改为其他颜色。
Size结构
Size结构
火龙果整理
用于定义Windows窗体应用程序中的窗口、控件和其他 矩形区域的大小。 具有宽度值Width和高度值Height属性,也可以使用 IsEmpty属性来检测Size是否为空。 初始化方法
直接指定高度值和宽度值,Size b = Size( 50,100 ); 通过一个Point变量来初始化, Size a = Size(Point(100,20) );
火龙果整理
声明 本文档收集自互联网,版权归原作者所有。因 不满有些人用其谋取私利而特意收集上传, 以发扬共享精神。仅供预览或读者私人使用 ,严禁用于商业使用或公开传播。请在下载 预览后尽快删除。
火龙果整理
GDI+绘图编程 入门
学习内容
火龙果整理
Graphics对象
Graphics类提供的许多绘图方法有:
火龙果整理
Clear方法:使用一种指定的颜色填充整修绘图表面。 例如,
Graphics^ g = this->CreateGraphics; g->Clear( this->BackColor ); //用当前控件的背景色填 充
座标系统
火龙果整理
在我们开始之前, 一定要先知道GDI+ 的座标系 统如何定义。座标原点(0, 0)在左上角, X 轴及Y 轴分别向右及向下增加, 预设的单位长度是像素 (pixel), 请看下图:
常用的数据结构
火龙果整理
在使用GDI+显示文字和绘制图形时,经常要用到一 些数据结构,如Size、Point和Rectangle等。它们 在System::Drawing命名空间中定义,都属于值类 型(结构类型)。 Point结构
判断两个Size变量是否相等可以使用其Equals方法,如
size1.Equals( size2 );
SizeF结构与Size结构——类似PointF结构与 Point结构。
Rectangle结构
Rectangle结构
火龙果整理
保存一个矩形区域的位置和大小,包含有X、Y、Width、 Height、Size属性,还有Top、Bottom、Left、Right等 属性返回各边坐标值。 Rectangle的初始化
RectangleF结构:使用SizeF结构和PointF结构。
Graphics对象
火龙果整理
在传统的Windows窗口中,使用Device Context, 即设备上下文,来进行绘图操作;而在.NET框架的 Windows窗体中则使用绘图对象进行绘图操作。 使用System::Drawing命名空间中的Graphics类封 装GDI+的绘图对象,在Windows窗体中的所有绘图 操作(包括显示文字)都必须通过这个类来进行。 Graphics类相当于MFC中的CDC类。 要使用Graphics进行绘图,首先必须获得它的对象 实例或是创建一个Graphics对象。最常用的方法是 可以通过窗体的Paint事件来获取对象实例,创建对 象则通过CreateGraphics方法。
Point结构
火龙果整理
Point( int dw ):通过一个用32位的整数来初始化,参数的 高16位表示Y坐标,低16位表示X坐标。 Point( Size sz ):通过一个Size变量来初始化。sz的宽度表 示X坐标,高度表示Y坐标。
可通过IsEmpty属性检测Point结构是否为空,为空则 返回true。 可以直接对Point变量进行+、–、==、!=运算以及 Point变量与Size值的加减操作。
5. 通过调用FromName静态方法,参数是一个字符串, 这个字符串必须是KnownColor枚举值的名称。如, Color sky = Color::FromName( ―Blue‖ );
Color属性
具有4个只读属性,可以用于提取颜色的各种成分
A,返回颜色的alpha成分; R,红色成分;G,绿色成分;B,蓝色成分。