⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 专业tc--图形篇.htm

📁 图形学的一些基础知识
💻 HTM
📖 第 1 页 / 共 3 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0034)http://tc2001.myrice.com/base6.htm -->
<HTML><HEAD><TITLE>专业TC--图形篇</TITLE>
<SCRIPT language=JavaScript><!--document.write('<SCRIPT language="JavaScript1.1" SRC="http://diyad.myrice.com/js/diyad.js">');document.write('</SCR');document.write('IPT>');//--></SCRIPT>

<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.2600.0" name=GENERATOR>
<META content=FrontPage.Editor.Document name=ProgId>
<META content=none name="Microsoft Border"></HEAD>
<BODY>
<H1 style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" align=center>&nbsp;&nbsp;&nbsp; 
<FONT color=#ff0000><B>WINDOWS图像编程</B></FONT></H1>
<H1 style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" align=center><B><FONT 
color=#00ff00><A href="http://tc2001.myrice.com/index.htm"><FONT 
size=5><B>回首页</B></FONT></A></FONT>  <A 
href="http://tc2001.myrice.com/base5.htm"><FONT size=5>上一页</FONT></A> <A 
href="http://tc2001.myrice.com/base7.htm"><FONT color=#00ff00 
size=5>下一页</FONT></A></B></H1>
<P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px"></P>
<HR>

<P>图形设备接口(GDI,Graphics Device 
Interface)的主要目标之一是支持在输出设备(如视频显示器、打印机和绘图仪)上的与设备无关的图形。 
GDI通过将应用程序与不同输出设备特性相隔离,使Windows应用程序能够毫无问题地在Windows支持的任何图形输出设备上运行。<BR>Windows中的图形基本上是由从GDI.EXE模块中输出的函数处理的(尽管一些绘制函数实际上具有USER.EXE的入口点),GDI.EXE模块调用在不同驱动程序文件中的例程,其中有一个.DRV驱动程序文件用于控制显示屏幕,并且可能有一个或多个其他的.DRV驱动程序文件用来控制打印机或绘图仪。<BR>Windows 
GDI使用两种坐标系统。使用虚拟坐标系统可以使程序不依赖于具体的硬件,使用设备坐标系统可以使程序和硬件紧密相联。<BR>GDI含有在Windows应用程序内部执行、且与设备无关的图形操作函数,这些函数可产生各种各样的线、正文和位图,它们可以输出到许多不同的输出设备上。GDI允许一个应用程序产生笔、刷子、字体和位图,以供特定的输出操作使用。下面列出GDI中几组比较常用的函数:<BR>·设备上下文函数<BR>·椭圆和多边形函数<BR>·绘图工具函数<BR>·位图函数<BR>·绘图属性函数<BR>·正文函救<BR>·映射函数。<BR>·坐标函数<BR>·元文件(metafile)函数<BR>·区域函数<BR>·裁剪(clipping)函数·<BR>窗口应用程序输出图形的操作步骤如下:<BR>①取得指定窗口的当前显示设备上下丈,显示设备上下文实际上是一个数据结构,它包括该窗口的参数及各种图形、文字属性的现行设定值,它们对以后的图形、文字输 
出命令起控制作用。<BR>②选择用户坐标系及映射方式。<BR>③设定用户坐标系中的观察窗口和设备坐标系中的显示视区。<BR>④输出图形、文字和图象。<BR>⑤释放所使用的显示设备上下文。<BR><BR>当想要在图形输出设备(例如屏幕或打印机)上绘制图形时,必须首先获得设备上下文的句柄。先给出这个句柄,Windows才允许程序使用设备,在GDI函数中将句柄作为一个参数传入,向Windows标明需要使用的设备。<BR>设备上下文中包含许多属性,当GDI在不同的设备上工作时都要用到这些属性。使用这些属性可使GDI只关心起始和终止坐标的大小,而不必关心有关对象的其他属性,如颜色、背景等等,因为这些都是设备上下文的一部分。当需要修改这些属性时,只需调用一个修改设备上下文中属性的参数,以后的程序中都使用修改后的设备上下文属性。设备上下文是连接Windows应用程序、设备驱动程序以及输出设备的纽带。<BR>获取设备上下文句柄有多种方法。最一般的方法是当处理一条消息时获得了设备上下文、并在退出窗口之前释放它。一般的处理方法如下:<BR>在处理WM_PAINT消息时<BR>case 
WM_PAINT:<BR>hdc=BeginPaint(hwnd,&amp;ps)<BR>EndPaint 
(hwnd,&amp;ps);<BR>其数据结构为:<BR>HDC hWnd;<BR>PAINTSTRUCT 
ps;<BR>而在windows.h中定义了PAINTSTRUCT的数据结构。<BR>type struct tagPAINTSTRUCT {<BR>HDC 
hdC;<BR>BOOL fErase;<BR>RECT rcPaint;<BR>BOOL fRestore;<BR>BOOL 
flncUpdate;<BR>BYTE 
rgbReserved[16];<BR>}PAINTSTRUCT;<BR>其中,hdc用于标识显式上下文,fErase指出背景是否重画,rcPaint是涂色矩形,其余的域均为保留。这里的hdc是BeginPaint返回的设备上下文句柄,有了从DeginPaint获取的设备上下文句柄,就可以也只能在ps指出的rcPaint的矩形内绘图,EndPaint调用使这一区域有效。<BR>第二种方法如下所示,使用这种方法获取和释放设备上下文可以在整个用户区内画图,图形在整个用户区域内都有效:<BR>hdC=GetDc 
(hwnd );<BR>…画图操作…<BR>ReleaseDC (hwnd , hdc 
);<BR>使用下面第三种方法获取和释放设备上下文,可以在整个窗口内画图,图形在整个窗口内有效:<BR>hdC=GetWindowDc(hwnd);<BR>…画图操作…<BR>ReleaseDc(hwnd,hdc);<BR>使用下面第四种方法获取和释放设备上下文,可以在整个显示器区域内画图,图形在整个显示器区域内部有效:<BR>hdc=CreateDC 
(lpszDriver ,lpszDevice ,lpszOutput , 
lpData);<BR>…画图操作…<BR>ReleaseDC(hdc);<BR>其中lpszDriver指向设备驱动程序的DOS文件名(不带扩展名),lpszDevice指向专用设备名(例如Epson 
Fx-80),lpszOutput指向物理输出介质(文件或输出端口)的DOS文件名或设备名,lpData指向含有设备驱动程序的设备专用的初始化数据的DEVMODE数据结构。例如:<BR>hdc=CreateDC("DISPLAY",NULL,NULL,NULL);<BR>使用屏幕画图,而:<BR>hdc= 
CreateDC ("IBMGRX","IBM Graphics","LPT1",NULL 
);<BR>在打印机上输出图形,这里的lpData置为默认值,可以在WIN.INI中找到初始化值。<BR>如果不需要获取设备上下文,即不需要在设备上下文中操作,只需了解有关设备上下文的信息,可以用如下语句:<BR>hdcInfo 
= CreateDC (lpszDriver, lpszDevice,lpszOutput, lpData );<BR>……<BR>DeteteDC 
(hdcInfo);<BR>另外,还可以使用设备上下文来对位图的内存进行控制,如下所示:<BR>hdcMem = CreateCompatibleDC 
(hdc)<BR>OeleteDc(hdcMem 
);<BR>一个元文件是以二进制形式编码的GDI调用集合,可通过获取一个元文件设备上下文来建立一个文件:<BR>hdcMeta=CreateMetaFile(lpszFilename);<BR>……<BR>hmf=CloseMetaFile(hdCMeta);<BR>在元文件设备上下文有效期间,使用hdcMeta所进行的任何GDI调用都成为元文件的一部分,当调用CloseMetaFile时,设备上下文句柄变化无效,函数返回元文件(hmf)的句柄。<BR>一个设备上下文通常涉及物理设备,如视频显示器、打印机等,所以需要获取有关该设备的信息,如显示器大小和彩色能力等。可以通过调用GetDeviceCaps函数来获取这样的信息:<BR>nValue=GetDeviceCaps 
(hdc,nIndex);<BR>这里的hdc标识设备上下文,nIndex确定返回值,它可以是window.h中所定义的28个标识符中的一个,例如nIndex=DRIVEVERSION,则该函数返回的是版本号。<BR><BR>真正影响在用户区域上绘制过程的设备上下文属性是“映射方式”,与映射方式属性密切相关的还有如下四个设备上下义属性:窗口原点、视窗原点、窗口范围和视窗范围。<BR>Windows定义了八种映射方式,即:<BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR>这里的TWIP指的是1/1440英寸,in.代表英寸。<BR>可以调用函数setMapMode(hdc,MapMode)来设置这八种映射方式中的一种。hdc用来标识设备上下文,nMapMode可以取MM_TEXT、MM_LOMETRIC、MM_HIMETRIC等八个值中的一个。在设置了映射方式之后,到下一次设置映射方式之前,Windows一直使用这种映射方式。如果想要获取当前的映射方式,可用:<BR>nMapMode= 
GetMapMode 
(hdc)<BR>在设置了映射方式之后,就规定了逻辑单位的大小和增量的方式,在GDI画图函数中,可以不必考虑这些内容而直接使用逻辑数字,如:<BR>SetMapMode(hdc 
,MM_TEXT);<BR>TextOut(hdc,8 ,16,szBuffer 
,nLength)<BR>即正文从用户区域左起第八个象素,顶边起第16个象素的位置开始写操作。不管映射方式如何,Windows函数中所有坐标规定为-32768 
32767之间的带符号短整救。<BR>注意映射方式只是一个设备上下文属性,因此映射方式唯一起作用的是将映射方式作为设备上下文句柄属性,而将该句柄当作参数的GDI函数,因此象GetSystemMetrics这样的非GDI函数,将继续以设备单位(象素值)返回尺寸值。<BR><BR>用GDI的SetPixel函数可以绘制一特定颜色的象素:<BR>rgbActualColor 
=SetPixel (hdc,x,y,rgbColor);<BR>这里hdc标识设备上下文,x 
,y表示点坐标,rgbColor为一无符号的长整数,其结构为:<BR>COLORREF 
rgbColor;&nbsp;<BR>其中低位字节为红基色的相对亮度值,第二个字节包含绿基色的相对亮度值,第三个字节包含蓝基色的相对亮度值,高位字节必须为零。可以使用RGB函数来获取rgbColor。<BR>rgbColor 
=RGB(byRed 
,byGreen,byBlue);<BR>这里的byRed、byGreen、byBlue取值范围为0~255,分别代表红色、绿色、蓝色的亮度。给出正确的参数之后,SetPixel返回的是调色板中最靠近所需彩色的颜色。还可以使用如下方法来取得一个特定象素的颜色:<BR>rgbCotor= 
GetPixel(hdc,x,y);<BR><BR>画线函数主要有三种, LineTo、Polyline 和 
Arc。还有五个设备上下文属性会影响这些函数画出的线的外观:笔的当前位置(仅对LineTo有影响)、笔、背景方式(对非实心笔有影响)、背景颜色(对 
OPAQUE背景方式)以及绘制方式。<BR>在这些设备上下文的属性中,笔的当前位置影响画线的起点,笔影响线的粗细等形状,背景方式影响非实心笔画出的线的模板图形,背景颜色影响线模板背景色,绘制方式影响实心线、虚线等线属性。<BR>以下是典型的画线操作步骤:<BR>MoveTo(hdc,xStart,yStart);<BR>LineTo(hdc 
,xEnd 
,yEnd);<BR>上面两句画出一条从(xStart,yStart)到(xEnd,yEnd)的直线。&nbsp;<BR>可以使用语句:<BR>dwPoint 
= GetCurrentPosition 
(hdc);<BR>获得笔的当前位置。这里,dwPoint返回值是一个无符号长整数(或双倍长字),其中低位字含有X坐标,高位字含有Y坐标。<BR>可以使用MAKEPOINT函数将dwPoint转换为POINT结构;<BR>point 
= MAKEPOINT (dwPoint);<BR>point的类型为POINT:&nbsp;<BR>typedef struct togPOINT 
{kk1}&nbsp;<BR>int x;<BR>int 
y;<BR>}POINT;<BR>Polyline用于绘制折线,例:<BR>Polyline(hdc,&amp;pt,5)<BR>将数组pt中的5个点之间用线段相连。<BR>Arc用于画椭圆的周边:<BR>Arc 
(hdc,xLeft,yTop,xRight,yBottom,xStart,yStart,XEnd,yEnd 
);<BR>画出的椭圆以左上角为(xLeft,yTop),右下角为(xRight,yBottom)的矩形为界,圆弧开始于椭圆和(xStart,yStart)与椭圆中心的连线的交点处,沿着椭圆周边的过时针方向绘制,并终止于椭圆和(xEnd,yEnd)与椭圆中小的连线的交点处。<BR>当调用LineTo、Polyline和Arc时,Windows使用当前在设备上下文中选择的笔来画线,笔决定了线的颜色、密度和型式,而线型可以是实线、点线或短划(虚)线,缺省设备上下文中的笔叫做BLACK_PEN,不管映射方式如何选支笔以一个象素的宽度画黑色的实线, 
BLACK_PEN是Windows提供的三支“备用笔”之一,其他两支是WHITE_PEN和NULL_PEN,NULL_PEN是一支什么都不画的空笔,当然用户也可以自己建立定制的笔。<BR>可以通过一个句柄来引用所需的笔:&nbsp;<BR>HPEN 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -