第6章图形程序的编程基础_第1页
第6章图形程序的编程基础_第2页
第6章图形程序的编程基础_第3页
第6章图形程序的编程基础_第4页
第6章图形程序的编程基础_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第6章 图形程序的编程基础概论ngdi (graphics device interface)qwindows系统的一种软件子系统,它按照gdi函数来工作,负责在屏幕显示器和打印机上显示图形。q32位gdi就是gdi32.dll动态链结库,可以把它理解成gdi函数的解释器并按照解释调用相应的设备驱动程序。q不同的设备有不同的设备驱动程序,这就实现了与设备无关的图形输出,gdi在应用程序和不同输出设备之间起着隔离作用,应用程序只要考虑gdi函数不必考虑设备,是实现设备无关性输出的关键措施。gdi函数及其分类n取得和释放设备描述表代号的函数 q如前所述:beginpaint、getdc、getwi

2、ndowdcn取得字体尺寸信息的函数:gettextmetrics 。n 绘图函数:lineto(画直线)等n 设定和取得设备描述表中有关属性的函数 qsettextcolor、settextalign等n使用gdi对象的函数 q逻辑笔、画刷、字体等对象,使用时加载到设备描述表中gdi绘制的基本图形n直线和曲线 q支持直线、矩形、椭圆、圆弧n 填入区域 q对封闭区域可以使用当前gdi画刷对象进行填图n点阵图 q常用于图像的显示:bmp文件n文本图形程序设计的其他问题n 映射模式及其变换n metafile(元文件)qmetafile以图形绘制命令描述图像,因此可以对图像进行缩放而不会失真n 绘

3、图区域 n路径 n裁剪 n 调色盘 n 打印 设备描述表n取得设备描述表代号的方法qgetwindowdc:获取整个窗口的设备描述表代号,在wm_ncpaint消息分支中响应。qcreatedc:取得整个屏幕的设备描述表代号,常用于打印机。qcreateic:获取设备描述表的一些信息,但不能用此绘图。n取得设备描述表中信息的方法qgetdevicecaps,确定设备处理不同类型图形的能力。q程序保存设备描述表n原因q希望对改变后的设备描述表属性在下次使用仍然有效。n解决q在注册窗口时加入cs_owndc属性,只需初始化一次属性,一般在wm_create消息响应中设置。qcs_owndc只影响g

4、etdc和beginpaint获得的设备描述表qsavedc,restoredc设备描述表的构成n由19项构成n如果不对其属性改变,使用的是默认值,如上一章例子中使用的textout函数n典型:qtex tcolorqfontqcurrent position解析度n概念q每度量单位内的像素数目,打印机经常用“每英寸的点数(dpi)”表示,显示器以水平和垂直的总像素来表示的。q如果设备的水平解析度与垂直解析度相等,称为正方形像素。q可以使用sm_cxscreen和sm_cyscreen参数得到像素尺寸色彩n色彩数q每个像素的色彩数由表达颜色的二进制位数决定,最简单的黑白显示器由1位表达q在大多

5、数gdi函数调用中,使用colorref值,该值是一个32位的无正负号长整数,但只用了24位(3个8位,r、g、b3基色各占8位)q通常利用宏rgb构建画线函数与画笔n处理像素的函数 qwindows gdi尽管包含了setpixel和getpixel函数,但很少使用它们。qsetpixel (hdc, x, y, crcolor) ;/在(x,y)坐标处设置像素颜色crcolorqgetpixel函数返回指定座标处的像素颜色:qcrcolor = getpixel (hdc, x, y) ;画线函数与画笔n画线函数q画线函数的作用是画出图形的轮廓线。windows支持画直线、椭圆线等 qli

6、neto 画直线。qpolyline和polylineto 画一系列相连的直线。qpolypolyline 画多组相连的线。qarc 画椭圆线。qpolybezier和polybezierto 画贝塞尔曲线。q正弦曲线程序sinewave 画线函数与画笔n画线函数q与画线函数相关的设备描述表的属性:当前画笔的地址、画笔、背景方式、背景色和绘图模式qmovetoex函数改变(确定)画笔当前地址,用point结构体表达地址信息,可利用getcurrentpositionex函数获得画笔当前地址。n图形函数qrectangle画矩形qpie 画部分椭圆,呈扇形qchord画部分椭圆,呈弓形画线函数与

7、画笔n图形函数q画矩形rectangle (hdc, xleft, ytop, xright, ybottom) ; 画线函数与画笔n图形函数q画椭圆ellipse(hdc, xleft, ytop, xright, ybottom) ; (xleft, ytop), (xright, ybottom)构成的虚线称为椭圆的外接矩形 画线函数与画笔n图形函数q画圆角矩形roundrect(hdc, xleft, ytop,xright, ybottom, xcornerellipse,ycornerellipse) q如果xcornerellipse等於xleft与xright的差,且ycorn

8、erellipse等於ytop与ybottom的差,那么roundrect函数将画出一个椭圆,这个椭园是由四个园角所组成。 画线函数与画笔n图形函数qarc 画椭圆线,pie 画部分椭圆,呈扇形(封闭),chord画部分椭圆,呈弓形(封闭)q参数:(hdc, xleft, ytop, xright, ybottom, xstart, ystart, xend, yend) 画线函数与画笔n画笔q通常利用设备描述表中的默认画笔进行画线,也可以把预先设计好的画笔放入设备描述表中,然后用其画线。qwindows提供三种画笔:black_pen, white_pen,null_penq获取系统画笔:g

9、etstockobject(white_pen)q设置设备描述表画笔:selectobject(hdc,hpen);画线函数与画笔n画笔q画笔的建立nhpen=createpen(ipenstyle,iwidth,crcolor) createpenindirect(&logpen) hpen=getobject(hpen,sizeof(logpen), (lpvoid)&logpennipenstyle:ps_solid ps_dash ps_dot ps_dashdot ps_null ps_insideframeqps_insideframe:与填入区域的函数一起使用时,该样式可以保证画

10、出的线条在边界框之内。画线函数与画笔n画笔q画笔的删除n在wm_create消息期间建立,则在wm_destroy消息期间删除:deleteobjectn在wm_paint消息期间建立的画笔,一定要在endpaint前删除n注意:不要删除设备描述表中当前选择用的画笔画线函数与画笔n背景模式qopaque(不透明):windows使用背景颜色来填入空隙。qtransparent(透明):windows不使用背景颜色来填入空隙。q通过setbkmode改变n背景颜色q通过setbkcolor改变画线函数与画笔n“位布尔运算”与画线模式q当windows使用画笔来画线时,它实际上执行的是画笔像素与目

11、标地址处原有像素之间的某种“位布尔运算”。qwindows定义了16中运算模式,亦即画线模式,如r2_copypen,windows只是将画笔像素复制到目标像素。q通过setrop2(hdc, idrawmode)改变运算模式q典型: r2_copypen、r2_black、r2_nop画图n概念q与画线函数的区别,不仅要画边界框,还要画出区域中填入颜色n图形的填入画刷q默认情况使用白色画刷,windows定义了6种画刷q修改画刷nhbrush=getstockobject(gray_brush)nselectobject(hdc,hbrush)q注:无边框或者无填充的图形画图n画刷的建立qc

12、reatesolidbrush(crcolor)qcreatehatchbrush(ihatchstyle,crcolor)nihatchstyle:hs_horizontal。n画刷的选择和删除qselectobject(hdc, hbrush)qdeleteobject(hbrush)gdi映射方式n概念q为便于用户使用,windows提供了8种设备输出坐标表达方式,如:像素、毫米、英寸等,也就是gdi函数中使用的逻辑单位。qwindows中一切设备都用统一的单位:像素q因此需要将逻辑单位转换到设备单位,即为映射方式,mm_text,mm_loenglish,mm_himetric。qsetmapmode(hdc,imapmode)gdi映射方式n设备坐标和逻辑坐标qwindows中,一切设备都用统一的坐标,此坐标称为设备坐标。q所有设备坐标系都以像素为单位,水平轴上的值从左到右递增,垂直轴上的值从上到下递增。qwindows对所有消息,对所有非gdi函数,甚至一些gdi函数,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论