3.1 GDI编程基础-05
(C#)GDI+编程
Graphics g = this.CreateGraphics(); g.Clear(Color.White); Font f = new Font("隶书",20,FontStyle.Italic); Pen p = new Pen(Color.Green); g.DrawString("我叫徐守威!",f,p.Brush,50,50); g.Dispose(); p.Dispose(); } 截图:
Pen
定义用于绘制直线和曲线的对象。无法继承此类
Region 指示由矩形和.Drawing 命名空间中的常用结构
结构
说明
Color
表示 RGB 颜色
Point
表示在二维平面中定义的点、整数 X 和 Y 坐标的有序对
Rectangle 存储一组整数,共 4 个,表示一个矩形的位置和大小。对于更高级的区域函数,
截图:
2.Brush 类
Brush 类(画刷),用于填充图形。该类是一个抽象基类,不能直接实例化,可以通过派生类设置笔刷的
样式、颜色及线条的粗细。这里所谓的区域即在什么范围内使用画刷。Brush 类的派生类如表:
名称
说明
ImageBrush
图像绘制区域
LinearGradientBrush
GDI GDI 从入门到精通-第五讲资料
Bitmap的结构
BMP文件总体上由4部分组成,分别是位图文件头、位图信息 头、调色板和图像数据。
16
Bitmap的结构
位图文件头包含了图像类型、图像大小、图据存放地址和两个保 留未使用的字段。 typedef struct tagBITMAPFILEHEADER { WORD bfType; //图像类型 DWORD bfSize; //图像大小 WORD bfReserved1; //保留未使用的字断 WORD bfReserved2; //保留未使用的字断 DWORD bfOffBits; //图像数据存放地址 } BITMAPFILEHEADER
CreateDIBSection创建位图
CreateDIBSection函数的功能就是创建一个应用程序可以直接 写入像素颜色数据、与设备无关的位图。该函数提供一个指针,该指
针指向位图的像素颜色数据的地方。通过改指针修改数据,最终为该
位图写入了像素颜色数据了。
CreateDIBSection创建位图
了15位,最后一位保留,设为0。
24位图像使用3字节保存颜色值,每一个字节代表一种颜色,按 红、绿、蓝排列。 32位图像使用4字节保存颜色值,每一个字节代表一种颜色,除 了原来的红、绿、蓝,还有Alpha通道,即透明色。
22
GetDIBits获取位图数据
参数lpvBits指向接收位图数据的缓冲区,如果该参数为NULL, 位图的格式与大小将被写进由 参数lpbmi指向的BITMAPINFO结构中。 参数Lpbi指向BITMAPINFO结构。BITMAPINFO结构指定了 hbm位图数据的格式。如果lpvBits非空,则位图的颜色表将被设置 到此结构上。
CreateDIBSection创建位图
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
第五讲WIN32编程入门GDI绘图
GDI的画笔—创建画笔
HPEN CreatePen (
int fnPenStyle, int nWidth, COLORREF crColor );
// 线型 // 画笔线宽,以像素为单位 // 画笔颜色,RGB(R, G,B)
线型可选参数值: PS_SOLID PS_DASH PS_DOT PS_DASHDOT等
GDI的画刷—创建画刷
HBRUSH CreateSolidBrush ( COLORREF crColor // 画刷颜色 ); 创建一个单颜色的画刷,即填充区域内使用单一指定的颜色填 充
HBRUSH CreateHatchBrush
(
int fnStyle,
// 线条的图案方式
COLORREF crColor // 线条颜色
int nBottomRect //包围矩形的右下角y坐标
);
GDI基本图形—圆角矩形
BOOL RoundRect
(
HDC hdc,
// 设备句柄
int nLeftRect, //包围矩形的左上角x坐标
GDI GDI+从入门到精通-第三讲GDI+编程的基本概念
14
HatchBrush创建影线画刷
创建代码如下: Color black(255,0,0,0); Color white(255,255,255,255);
HatchBrush brushA(HatchStyleHorizontal, black, white); //水平 横线
HatchBrush brushB(HatchStyleVertical, black, white); //垂直坚线
HatchBrush brushC(HatchStyleCross, black, white); //十字网格线
15
HatchBrush创建影线画刷
• 前景色与背景色的关系,就像 国际象棋盘,第一块为背景色 ,第二块为前景色,第三块为 背景色,如图:
21
Graphics绘制图片
把图片的指定区域绘制在指定位置的方法如下:
DrawImage(Image* image, INT x, INT y, INT srcx, INT srcy, INT srcwidth, INT srcheight, Unit srcUnit); DrawImage(Image* image, REAL x, REAL y, REAL srcx, REAL srcy, REAL srcwidth, REAL srcheight, Unit srcUnit);
23
Graphics绘制图片
把图片的指定区域绘制在指定目标区域的方法如下:
DrawImage(Image* image, const Rect& destRect, INT srcx, INT srcy, INT srcwidth, INT srcheight, Unit srcUnit); DrawImage(Image* image, const RectF& destRect, REAL srcx, REAL srcy, REAL srcwidth, REAL srcheight, Unit srcUnit);
GDI基础及框架应用程序解析_图文
Windows编程基础1本课程旨在向学员介绍:1掌握GDI基础应用2掌握框架应用程序开发过程3深入透彻理解框架应用程序时间:学时6教学方法:讲授+课上练习+课下作业第七章GDI基础及框架应用程序解析23从需求开始•编写一个单文档应用程序,程序运行后界面显示:”这是一个单文档应用程序!”.4三种典型的Visual C ++应用程序•使用AppWizard 创建项目时可以选择三种类型的应用界面即单文档、多文档和基于对话框的应用程序。
–单文档程序一次只能打开一个文件或文档,如记事本程序。
–多文档程序一次可以打开多个文档,如word 程序。
•使用AppWizard 创建单文档和多文档程序几乎一样,差别在于:–在创建SDI 界面的应用程序时,生成CMainFrame 类,CMainFrame 类的基类为CFrameWnd –在创建MDI 界面的应用程序时,CMainFrame 类的基类为CMDIFrameWnd ,生成CMDIChildWnd 类5•每次当视窗需要被重新绘制时,应用程序框架就要调用OnDraw 函数。
•驱使程序调用OnDraw 的两个途径:–用户改变窗口的尺寸;窗口恢复先前被遮盖的部分;应用程序改变了窗口数据;–程序中调用Invalidate (或者InvalidateRect ,通知Windows 调用OnDraw 函数OnDraw 成员函数•MFC中有许多类,但只有少数几个核心的类会对应用程序的基本框架产生影响,它们分别是–CWinApp–CDocument–CView–CFrameWnd–CDocTemplate•这5个类构成了大部分MFC文档/视图框架应用程序的核心,6•MFC并不是直接利用这些类生成框架,而是使用他们的派生类。
–基类派生类–CWinApp CHelloApp–CFrameWnd CMainFrame–CDocument CHelloDoc–CView CHelloView•使用派生类优点–继承基类功能–继承了框架–方便增加新功能78应用程序类和框架窗口类•应用程序类(CWinApp : 用MFC 编写的程序中唯一必不可少的类就是CWinApp ,它控制程序的流程。
GDI篇
Windows程序设计--GDI篇(1)1.GDI分类图形输出设备分为两大类:位映像设备和向量设备。
大多数PC的输出设备是位映像设备,这意味着它们以图点构成的数组来表示图像,这类设备包括视讯显示卡、点阵打印机和激光打印机。
向量设备使用线来绘制图像,通常局限于绘图机。
2.GDI函数调用顺序:●取得(或者建立)和释放(或者清除)设备内容(句柄)的函数。
GetDC()和RealseDC()在非WM_PAINT消息块使用,BeginPaint和EndPaint在WM_PAINT消息处理块使用。
●取得有关设备内容信息的函数。
例如,GetTextMetrics和GetSystemMetrics函数。
●绘图函数。
例如,TextOut、Rectangle、LineTo等等。
●设定和取得设备内容参数的函数。
例如,SetTextColor是用来指定当前设备内容输出文字的颜色,TextOut输出文字的颜色就是它指定的;SetTextAlign是设定设备内容文字对其方式属性的。
●使用GDI对象函数。
在绘画时,线形、画刷、画笔等等并不是设备内容属性,而是GDI对象,在使用时,应该先调用函数创建对象,如CreatePen、CreatePenIndirect或ExCreatePen。
然后将对象选中到设备内容中,选中之后,设备内容就具有了相应的GDI对象属性,此时,就可以绘制图型了。
3.取得设备内容句柄:●WM_PAINT消息处理:此时绘图函数只能局限在ps.rcPaint矩形区域。
●非WM_PAINT消息处理:此时绘图函数可以在正个客户区域绘图,但是该函数不能使任何无效区域变为有效。
●取得整个窗口的设备内容句柄:该方法一般在处理WM_NCPAINT(非客户区)消息中使用。
●取得整个屏幕或者不与特定窗口相关的设备内容句柄:●获取设备信息内容的句柄:该句柄只能用来获取信息而不能进行任何绘图工作。
●创建内存设备内容:内存DC创建之后,可以为设备内容选中一副位图,然后使用GDI函数在位图上绘画。
GDI编程基础
GDI编程基础GDI(Graphics Device Interface,图形设备接口)是在Windows平台上处理图形、图像的方法,它是一套API函数;它们功能丰富,使用起来简单、灵活。
下面,我们首先来介绍一些GDI编程的基础知识。
GDI函数有很多,我们大致可以把它们分成如下几类:· 设备上下文(Device Context,简称DC)函数,如GetDC、CreateDC、DeleteDC等;· 画线函数,如LineTo、Polyline、Arc等;· 填充画图函数,如Ellipse、FillRect、Pie等;· 画图属性函数,如SetBkColor、SetBkMode、SetTextColor等;· 文本、字体函数,如TextOut、GetTextExtentPoint32、GetFontData等;· 位图函数,如SetPixel、BitBlt、StretchBlt等;· 坐标函数,如DPtoLP、LPtoDP、ScreenToClient、ClientToScreen等;· 映射函数,如SetMapMode、SetWindowExtEx、SetViewportExtEx等;· 元文件(MetaFile)函数,如PlayMetaFile、SetWinMetaFileBits等;· 区域(Region)函数,如FillRgn、FrameRgn、InvertRgn等;· 路径(Path)函数,如BeginPath、EndPath、StrokeAndFillPath等;· 裁剪(Clipping)函数,如SelectClipRgn、SelectClipPath等。
上述这些函数可以完成绘制用户界面中的各个部分,包括我们在Windows平台上司空见惯的窗口、菜单、工具条、按钮等。
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)是成对出现的。
GDI+编程
1. 掌握GDI+基础知识 2. 学习GDI+基础编程
GDI 与 GDI+
GDI(Graphics Device Interface)
——图形设备接口,负责系统与绘图程序之间的 信息交换,处理所有Windows程序的图形输出 GDI+ 继承了GDI,是.Net Framework的绘图技术, 负责在显示屏幕和打印设备输出有关信息 1.GDI+对GDI进行了优化,并添加了许多新的功能
2. DrawEllipse
—— 绘制一个由边框(该边框由一对坐标、高度和宽度指定) 定义的椭圆
3. DrawImage
——在指定位置并且按原始大小绘制指awLines
——绘制一条或 一系列连接由坐标对指定的两个点的线条
5. DrawPie
——绘制一个扇形,该形状由一个坐标对、宽度、高度以及两 条射线所指定的椭圆定义
1.1 //绘制正切曲线 C#的优势
private void DrawSin() { int x1,x2; double y1,y2; double a; Pen myPen=new Pen(Color.Blue,3); x1=x2=0; y1=y2=panel1.Height/2; for (x2= 0;x2<panel1.Width;x2++) { a=2 * Math.PI*x2/panel1.Width; y2= Math.Tan(a); y2= (1y2)*panel1.Height/2; panel1.CreateGraphics().DrawLine(myPen,x1,(float)y1,x2,(float)y2); x1=x2; y1=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
功能描述
绘制直线 填充椭圆区域 填充扇形区域 多边形区域 矩形区域
MFC使用GDI+编程设置
MFC使用GDI+编程设置VC2005“项目/*属性”菜单项,打开项目的属性页窗口,先选“所有配置”,再选“配置属性/链接器/输入”项,在右边上部的“附加依赖项”栏的右边,键入GdiPlus.lib 后按“应用”钮,最后按“确定”钮关闭对话框。
在需要用到GDI+的文件头加上下面两句#include <gdiplus.h>using namespace Gdiplus;在应用程序类应用程序类(CGDIPlusDemoApp) 头文件中声明一个成员变量:ULONG_PTR m_gdiplusToken; // ULONG PTR 为int64 类型并在该类的初始化函数CGDIPlusDemoApp::InitInstance() 中加入以下代码来对GDI+进行初始化:GdiplusStartupInput gdiplusStartupInput;GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);注意:这两个语句必须加在应用程序类的InitInstance函数中的CWinApp:: InitInstance ();语句之前,不然以后会造成视图窗口不能自动重画、程序中不能使用字体等等一系列问题。
还要在CGDIPlusDemoApp::ExitInstance() 函数(重写)中加入以下代码来关闭GDI +:GdiplusShutdown(m_gdiplusToken);上面是所需步骤..MFC使用GDI+编程基础封装在GDI+ API中的各种C++类、函数、常量、枚举和结构,都被定义在Gdiplus.h头文件所包含的一系列头文件中。
所以,采用MFC进行GDI+编程,必须包含Gdiplus.h头文件。
封装在GDI+类中方法,最后都需要调用GDI+平面API中的相关底层函数,才能完成实际的操作。
所以,为了运行GDI+应用程序,在操作系统平台中,必须安装动态链接库Gdiplus.dll。
【Windows编程】系列第五篇: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);它可以指定画笔风格,宽度和颜⾊。
GDI+编程基础
Gdiplus::GdiplusShutdown(m_gdiplusToken);
returnCWinApp::ExitInstance();
}
(4)、在应用类的InitInstance函数中添加GDI+的初始化代码:
BOOL CGDIPlusApp::InitInstance(){
graphics.FillRectangle(&linGrBrush, 300, 50, 200, 100);
}
七、使用画笔
画笔常用于绘制图形的轮廓。GDI+的画笔除了常见的色彩和宽度外,还具有对齐方式,线帽,变换方式等属性。GDI+通过Pen类来定义画笔对象。
1、构造与使用画笔
Pen(brush, width);//用颜色与线宽构造一个画笔
4、矩阵和矩阵变换
在图形处理过程中常需要对其几何信息进行变换以便产生复杂的新图形,矩阵是这种图形几何变换最常用的方法。为了满足人们对图形变换的需求,GDI+提供了功能强大的Matrix类来实现矩阵的旋转、错切、平移、比例等变换操作,并且GDI+还支持Graphics图形和区域(Region)的矩阵变换。
ULONG_PTR m_gdiplusToken;
ULONG_PTR是一个DWORD数据类型,该成员变量用来保存GDI+被初始化后在应用程序中的GDI+标识,以便能在应用程序退出后,引用该标识来调用Gdiplus:: GdiplusShutdown来关闭GDI+。
(3)、在应用类中添加ExitInstance的重载,并添加下列代码用来关闭GDI+:
2、设值宽度与对齐方式
图型图像GDI编程
案例2: (绘制弧线)
將於一個左上角位於 (50, 50), 寬度為 100, 高度為 350 的矩形內, 繪出 一起始角為 0 度, 弧角為120 度的弧線。
private void Form10_Paint(object sender, PaintEventArgs e) { Pen drawPen = new Pen(Color.Red, 3);
8
4.3 Graphics类别简介
4、填充背景颜色案例
private void Form10_Paint(object sender, PaintEventArgs e) { e.Graphics.Clear(Color.Red); }
指定顏色也可以利用RGB來指定,如: 純紅色畫布: e.Graphics.Clear(Color.FromARGB(255,0,0)); 純綠色畫布: e.Graphics.Clear(Color.FromARGB(0,255,0)); 純藍色畫布: e.Graphics.Clear(Color.FromARGB(0,0,255));
GDI+编程
第6章 GDI+// 陈宝楷_Saturday, September 15, 2007GDI+(Graphics Device Interface Plus 图形设备接口加)是Windows XP 和Windows Server 2003操作系统的子系统,也是.NET 框架的重要组成部分,负责在屏幕和打印机上绘制图形图像和显示信息。
顾名思义,GDI+是Windows 早期版本所提供的图形设备接口GDI 的后续版本。
GDI+是一种应用程序编程接口(API),通过一套部署为托管代码的类来展现。
这套类被称为GDI+的“托管类接口”。
GDI+最早是于2001年随Windows XP 一起推出的一种API,后来又被包装进.NET 框架的托管类库之中,成为.NET 中窗体绘图的主要工具。
GDI+不但在功能上比GDI 要强大很多,而且在代码编写方面也更简单,因此会很快成为Windows 图形图像程序开发的首选。
本章将介绍GDI+的特点和新增功能,以及GDI+ API 的具体使用方法,包括二维矢量图形的绘制、图像处理的应用、以及文字的显示。
6.1 概述GDI+与GDI 一样,都具有设备无关性。
应用程序的程序员可利用GDI+这样的图形设备接口在屏幕或打印机上显示信息,而不需要考虑特定显示设备的具体情况。
应用程序的程序员调用GDI+类提供的方法,而这些方法又反过来相应地调用特定的设备驱动程序。
GDI+将应用程序与图形硬件隔离,而正是这种隔离允许开发人员创建设备无关的应用程序。
GDI+的体系结构本节首先介绍GDI+的几个主要新增的特性及其功能,然后说明它给Windows 图形图像程序的开发模式带来的变化,最后给出一个代码实例,介绍如何在VC++中使用GDI+进行程序开发。
1.GDI+的功能GDI+主要提供了以下三种功能:1)二维矢量图形矢量图形包括坐标系统中的系列点指定的绘图基元(如直线、曲线和图形)。
例如,直线可通过它的两个端点来指定,而矩形可通过确定其左上角位置的点并给出其宽度和高度的一对数字来指定。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
内容提要: 内容提要:
3.1 GDI编程基础 编程基础 3.2 OpenGL简介及工具包 OpenGL简介及工具包 3.3 OpenGL初步编程 初步编程 3.4 OpenGL基本几何图形的绘制 基本几何图形的绘制
2006
1
GDI编程基础 3.1 GDI编程基础
GDI是一种Windows提供的绘制图形和图像的函 GDI是一种Windows提供的绘制图形和图像的函 是一种Windows提供的绘制图形和图像的 数库和 数库和类库 开发工具Visual C++的MFC类库中的部分类封装 开发工具Visual C++的MFC类库中的部分类封装 了大量的图形图像方法
二维领域
2006
4
3.1.2 MFC编程基础 MFC编程基础
可以利用程序向导自动产生界面(三种类型), 可以利用程序向导自动产生界面(三种类型), 对于一个单文档程序,将生成的类有: 对于一个单文档程序,将生成的类有:
1)表示程序的CWinApp类 表示程序的CWinApp类 CWinApp 2)表示主窗体的CMainFrame类 表示主窗体的CMainFrame类 CMainFrame 3)表示显示区的CView类 表示显示区的CView类 CView 4)和硬盘交互的CDocument类 和硬盘交互的CDocument类 CDocument 5)代表版本对话框的CAboutDlg类 代表版本对话框的CAboutDlg类 CAboutDlg
2006 16
3.1.4 二个综合应用实例
在这个应用程序例子中,我们实现了一个画泡泡的效果, 在这个应用程序例子中,我们实现了一个画泡泡的效果,涉及 到了画圆、画矩形、图形填充等操作。 到了画圆、画矩形、图形填充等操作。 例1
在这个应用程序例子中,我们实现了一个猫捉老鼠的游戏,涉 在这个应用程序例子中,我们实现了一个猫捉老鼠的游戏, 及到了图像显示、画矩形、图形填充等操作。 及到了图像显示、画矩形、图形填充等操作。 例2
2006
3
GDI概述 概述( 3.1.1 GDI概述(续)
GDI的主要图形应用有: GDI的主要图形应用有: 的主要图形应用有
二维游戏开发,如纸牌类、棋类; 二维游戏开发,如纸牌类、棋类; 影视特殊效果制作,如字幕制作; 影视特殊效果制作,如字幕制作; 开发可视化仿真类软件; 开发可视化仿真类软件; 高级界面制作
2006
14
3.1.4 3.1.4图像的显示
CBitmap 类
CDC类的BitBlt方法 CDC类的BitBlt方法 类的BitBlt
2006
15
3.1.4图像的显示( 3.1.4图像的显示(续)
CDC memDC; CBitmap bmp; CBitmap* pOldBmp = NULL; BITMAP bm; bmp.LoadBitmap(IDB_TEST); bmp.GetBitmap(&bm); int Width=bm.bmWidth, Height=bm.bmHeight; memDC.CreateCompatibleDC(pDC); pOldBmp = memDC.SelectObject(&bmp); pDC->BitBlt(0,0,Width,Height,&memDC,0,0,SRCCOPY); memDC.SelectObject(pOldBmp); memDC.DeleteDC(); bmp.DeleteObject();
GDI概述 3.1.1 GDI概述 3.1.2 MFC编程基础 3.1.2 MFC编程基础 3.1.3 基本几何元素的绘制 3.1.4 图像的显示 3.1.5 3.1.5 二个综合应用实例
2006
2
GDI概述 3.1.1 GDI概述
GDI是Windows平台下生成、显示图形、图像的命令库, GDI是Windows平台下生成、显示图形、图像的命令库,是应用 平台下生成 程序开发的调用接口; 程序开发的调用接口; GDI提供图像的读取、显示,及产生简单二维图形元素的命令; GDI提供图像的读取、显示,及产生简单二维图形元素的命令; 提供图像的读取 GDI是位于应用程序与不同硬件之间的中间层, GDI是位于应用程序与不同硬件之间的中间层,这种结构让程序 是位于应用程序与不同硬件之间的中间层 员从直接处理不同硬件的工作中解放出来, 员从直接处理不同硬件的工作中解放出来,把硬件间的差异交给了 GDI处理 通过GDI 应用程序可驱动不同输出设备特性, 处理。 GDI, GDI处理。通过GDI,应用程序可驱动不同输出设备特性,使 Windows应用程序能够毫无障碍地在Windows支持的任何图形输出设 应用程序能够毫无障碍地在Windows Windows应用程序能够毫无障碍地在Windows支持的任何图形输出设 备上运行; 备上运行; GDI是以文件的形式存储在系统中, GDI是以文件的形式存储在系统中,系统需要输出图形时把它载 是以文件的形式存储在系统中 入内存,如果转换成硬件命令时遇到非GDI命令, GDI命令 入内存,如果转换成硬件命令时遇到非GDI命令,系统还可能载入 硬件驱动程序,驱动程序辅助GDI把图形命令转换成硬件命令。 GDI把图形命令转换成硬件命令 硬件驱动程序,驱动程序辅助GDI把图形命令转换成硬件命令。 C++提供的类库MFC已经封装了主要的GDI函数 提供的类库MFC已经封装了主要的GDI函数, Visual C++提供的类库MFC已经封装了主要的GDI函数,程序员可 以在MFC程序中自由使用GDI MFC程序中自由使用GDI提供的功能 以在MFC程序中自由使用GDI提供的功能
使用CDC类的函数画填充图形 使用CDC类,下面代码画一个填充矩形
2006
13
3.1.3图形元素的填充( 3.1.3图形元素的填充(续)
CBrush NewBrush,*pOldBrush; NewBrush.CreateSolidBrush(RGB(255,0,0)); pOldBrush=pDC->SelectObject(&NewBrush); pDC->FillRect(&rect); pDC->SelectObject(pOldBrush); NewBrush.DeleteObject();
3)画椭圆
BOOL Ellipse( int x1, int y1, int x2, int y2 ); BOOL Ellipse( LPCRECT lpRect );
2006
10
3.1.3基本图形元素的绘制( 3.1.3基本图形元素的绘制(续)
4)画圆弧
BOOL Arc( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4 ); BOOL Arc( LPCRECT lpRect, POINT ptStart, POINT ptEnd );
2006
6
3.1.3 3.1.3基本图形元素的绘制
1)画直线: 画直线:
MoveTo, LineTo
2)画矩形
Rectangle
3)画椭圆
Ellipse
4)画圆弧
Arc
5)画多边形
Polygon
2006 7
3.1.3基本图形元素的绘制( 3.1.3基本图形元素的绘制(续)
1)画直线: 画直线:
CPoint MoveTo( int x, int y ); CPoint MoveTo( POINT point ); BOOL LineTo( int x, int y ); BOOL LineTo( POINT point );
2006
8
3.1.3基本图形元素的绘制( 3.1.3基本图形元素的绘制(续)
2)画矩形
BOOL Rectangle( int x1, int y1, int x2, int y2 ); BOOL Rectangle( LPCRECT lpRect );
2006
9
3.1.3基本图形元素的绘制( 3.1.3基本图形元素的绘制(续)
2006
17
2006
5
MFC编程基础 编程基础( 3.1.2 MFC编程基础(续)
在表示显示区的CView类中, 在表示显示区的CView类中,有一个用于刷 CView类中 新显示区的方法OnDraw(CDC* 新显示区的方法OnDraw(CDC* pDC)
专门用于画图, 其输入参数pDC是一个CDC类的对象 ,专门用于画图,它提 供了各种画笔、画刷、 供了各种画笔、画刷、填充颜色等
2006
11
3.1.3基本图形元素的绘制( 3.1.3基本图形元素的绘制(续)
5)画多边形
BOOL Polygon ( LPPOINT lpPoints, int nCount );
lpPoints :顶点列表 nCount :定点数目
2006
12
3.1.3 3.1.3图形元素的填充
刷子的定义与使用