




已阅读5页,还剩41页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
图形与图像编程基础 本章主要学习内容 图形处理的基本原理 图形设备接口设备环境GDI坐标系映射模式使用画笔和画刷绘制图形文本与字体位图 图标和光标 6 3绘制基本图形 Windows中的基本图形包括点 直线 圆 圆弧 矩形 椭圆等 MFC把绘制这些图形的函数封装在CDC类中 绘图通常编写C View类的OnDraw CDC pDC 函数 其中参数pDC指当前设备环境指针 补充 橡皮筋技术 利用SetROP2函数 先了解SetROP2函数的两个参数R2 NOT与R2 NOTXORPEN的使用效果 以下为该两种绘画模式举例 R2 NOTXORPEN绘画模式你用红色画笔在黑色背景上画一条直线 显示红色 但你再用这只笔在刚画的直线上重画一遍 就相当于把开始画的红线擦除掉了 划线的地方显示为背景色 R2 NOT绘画模式同样有在同一个地方画两次相当于什么都没画的功能 不过R2 NOT绘画模式第一次画的时候显示颜色并不是你选定的画笔颜色 而是默认的颜色 颜色 一个彩色象素的显示需要颜色空间的支持 常用的颜色空间有RGB RGB颜色空间选用红 R 绿 G 蓝 B 三种基色分量 通过对这三种基色不同比例的混合 可以得到不同的彩色效果 在MFC中 CDC使用的是RGB颜色空间 其中 COLORREF是用来表示RGB颜色的一个32位的数据类型 它可以用下列的十六进制表示一个RGB值 0 x00bbggrr 其中bb gg rr分别表示蓝 绿 红3个颜色分量的十六进制值 颜色 在具体操作RGB颜色时 可使用下列的宏操作 GetBValue GetGValue GetRValue来获得其中各个颜色分量值 如 intnRed GetBValue color RGB可以将指定的三个分量值转换成一个32位的RGB颜色值 如 COLORREFcolor RGB nRed nGreen nBlue 颜色和颜色对话框 MFC的CColorDialog类为应用程序提供了颜色选择通用对话框 构造函数如下 CColorDialog COLORREFclrInit 0 DWORDdwFlags 0 CWnd pParentWnd NULL 其中 clrInit指定选择的默认颜色值 默认为RGB 0 0 0 黑色 pParentWnd指定对话框的父窗口指针 dwFlags指定对话框外观和功能 见教材P209 当对话框单击OK退出时 可调用下列成员函数获得相应的颜色 COLORREFGetColor const voidSetCurrentColor COLORREFclr staticCOLORREF GetSavedCustomColors 输出文本与画点 设置文本的前景色pDC SetTextColor RGB 255 0 255 输出文本pDC TextOut 20 20 Point 以不同的颜色画点pDC SetPixel 100 20 RGB 255 0 0 pDC SetPixel 110 20 RGB 0 255 0 pDC SetPixel 120 20 RGB 0 0 255 画直线 矩形与椭圆 画直线pDC MoveTo 20 90 pDC LineTo 160 90 pDC LineTo 130 80 直角矩形pDC Rectangle 190 270 250 310 圆角矩形pDC RoundRect 265 270 330 310 30 20 椭圆pDC Ellipse 200 160 280 200 6 4画笔和画刷 6 4 1画笔6 4 2画刷6 4 3画笔和画刷的应用程序举例 6 4 1画笔 一个画笔通常具有宽度 样式和颜色三种属性 画笔的宽度用来确定所画的线条宽度 它是用设备单位表示的 默认的画笔宽度是一个像素单位 画笔的颜色确定了所画的线条颜色 画笔的样式确定了所绘图形的线型 它通常有实线 PS SOLID 虚线 PS DASH 点线 PS DOT 点划线 PS DASHDOT 双点划线 PS DASHDOTDOT 不可见线 PS NULL 和内框线 PS INSIDEFRAME 等七种样式 1 创建画笔 CPen类封装图形设备接口GDI画笔对象的功能 创建画笔可以采用以下几种方法 1 使用无参构造函数声明对象 之后调用成员函数CreatePen 创建具体的画笔 BOOLCreatePen intnPenStyle intnWidth COLORREFcrColor 其中nPenStyle表示画笔的样式 nWidth表示画笔的线宽 crColor表示画笔的RGB颜色 例如 CPenPen Pen CreatePen PS SOLID 1 RGB 255 0 0 调用成员函数 创建线宽为1的红色实线画笔 1 创建画笔 2 使用构造函数创建画笔CPen intnPenStyle intnWidth COLORREFcfColor 例如 CPenPen PS SOLID 1 RGB 255 0 0 调用构造函数 创建线宽为1的红色实线画笔 2 库存画笔 库存画笔又叫堆画笔 Windows定义了三种库存画笔 程序员可以直接使用这些画笔 而不用创建对象 三种库存画笔分别是 BLANK PEN 黑色画笔 WHILE PEN 白色画笔 NULL PEN 空画笔 可以使用CPen CreatestockObject 函数进行创建 CPenPen Pen CreatestockObject WHILE PEN 可以以库存画笔为参数来调用SelectStockObject 函数 此函数选定放入当前设备环境的新对象 并返回一个指向被替换对象的指针 CPen pOldPen pDC SelectStockObject BLANK PEN 3 画笔的使用方法 1 创建画笔 2 使用新的画笔 保存原来的画笔以便恢复 CPen pOldPen pOldPen pDC selectObject 保存并恢复原来画笔的原因是每个图形设备接口对象要占用一个HDC句柄 而可用的句柄数量有限 如果用完后未及时释放 积累下去将导致严重的运行错误 例 画笔的使用 CPen pNewPen newCPen if pNewPen CreatePen PS DASHDOT 3 RGB 255 0 0 CPen pOldPen pDC SelectObject pNewPen 用新创建的画笔绘图pDC MoveTo 10 10 pDC LineTo 150 10 恢复设备描述表中原有的笔pDC SelectObject pOldPen else MessageBox CreatePenERROR deletepNewPen 例 堆画笔的使用 CPen pOldPen CPen pDC SelectStockObject BLACK PEN pDC MoveTo 10 20 pDC LineTo 200 20 pDC LineTo 200 40 pDC LineTo 10 40 pDC LineTo 10 20 恢复设备描述表中原有的笔pDC SelectObject pOldPen 6 4 2画刷 画刷是用来填充图形的工具 画刷的属性通常包括填充色 填充图案和填充样式三种 画刷的填充色和画笔颜色一样 都是使用COLORREF颜色类型 画刷的填充图案通常是用户定义的8x8位图 而填充样式往往是CDC内部定义的一些特性 它们都是以HS 为前缀的标识 如图所示 6 4 2画刷 MFC把GDI画刷封装在CRush类中 画刷的使用方法同画笔 画刷分为纯色画刷 阴影画刷 堆画刷和图案画刷 CBrush类为不同的画刷类型提供了不同的构造函数 Windows定义的堆画刷共有7种 分别是 BLACK BRUSH 黑色画刷 DKGRAY BRUSH 深灰色画刷 GRAY BRUSH 灰色画刷 HOLLOW BRUSH 空画刷 LTGRAY BRUSH 浅灰色画刷 NULL BRUSH 空画刷 WHITE BRUSH 白色画刷 6 4 2画刷 对堆画刷 调用SelectStockObject 函数进行选择画刷 例如 CBrush pOldBrush pDC SelectStockObject WHITE BRUSH 选择白色堆画刷 创建CBrush对象的四个构造函数为 1 CBrush 使用前必须初始化画刷 2 CBrush COLORREFcfColor 构造带有指定颜色的纯色画刷例如 CBrushBrush RGB 255 0 0 创建红色画刷 3 CBrush intnIndex COLORREFcfColor 构造带有指定阴影风格和颜色的填充画刷nIndex指定的阴影风格 如表6 4所示 4 CBrush CBitmap pBitmap 构造使用位图图案的画刷CBitmap对象最大可使用8 8像素 若位图过大 则只有左上角的部分可以用作画刷图案 创建画刷的其他成员函数 还可在创建画刷对象后 调用以下的CBrush类的成员函数来创建不同的画刷 CreateSolidBrush 创建纯色画刷CreateHatchBrush 创建阴影画刷CreatePatternBrush 创建图案画刷如 CBrushBrush COLORREFc c RGB 255 255 0 Brush CreateHatchBrush HS DIAGCROSS c 例 画刷的使用 CBrush pNewBrush newCBrush pNewBrush CreateSolidBrush RGB 180 70 230 CBrush pOldBrush pDC SelectObject pNewBrush 选择新画刷pDC Rectangle 10 60 200 100 绘制矩形pDC SelectObject pOldBrush 恢复设备描述表中原有的画刷deletepNewBrush 删除新画刷 例 画刷的使用 CBrush pNewBrush newCBrush pNewBrush CreateSolidBrush RGB 180 70 230 CBrush pOldBrush pDC SelectObject pNewBrush 选择新画刷pDC Rectangle 10 60 200 100 绘制矩形pDC SelectObject pOldBrush 恢复设备描述表中原有的画刷deletepNewBrush 删除新画刷 6 5字体 字体定义显示文本的符号和字符 通过处理字体可以显示某种特殊效果的文字 描述输出文字的字体可用CFont对象 CFont对象的使用方法与画笔和画刷类似 定义字体对象 创建字体并保存原来的字体 在文字输出工作结束后恢复原来的字体 字体的属性 字体的主要属性有字样 风格和尺寸 字样是字符书写和显示时表现的特定模式 如宋体 楷体等多种字样 字体风格主要表现为字体的粗细和是否倾斜等特点 字体是用来指定字体所占区域的大小 通常用字符高度来描述 1 字体的创建 1 1 为了方便用户创建字体 系统定义一种逻辑字体 根据定义的逻辑字体 可调用CFont类的CreateFontIndirect函数来创建字体 LOGFONTlf CFontcf memset typedefstructtagLOGFONT LONGlfHeight 字体的逻辑高度LONGlfWidth 字符的平均逻辑宽度LONGlfEscapement 倾角LONGlfOrientation 书写方向LONGlfWeight 字体的粗细程度BYTElfItalic 斜体标志BYTElfUnderline 下划线标志BYTElfStrikeOut 删除线标志BYTElfCharSet 字符集 汉字必须为GB2312 CHARSETTCHARlfFaceName LF FACESIZE 字样名称 LOGFONT 1 字体的创建 2 当需要某一特定的字体时 可以使用MFC的CFont类的CreateFont 成员函数来创建字体 若该函数调用成功 则返回非0值 否则返回0 其函数原型如下 BOOLCFont CreateFont intnHeight 字符逻辑高度intnWidth 字符逻辑宽度intnEscapement 出口矢量与X轴的角度intnOrientation 字符基线与X轴的角度intnWeight 字体磅值BYTEbItalic 非0则为斜体 BYTEbUnderline 非0则加下划线BYTEcStrickOut 非0则加删除线BYTEnCharSet 此字体的字符集BYTEnClipPrecision 裁剪精度BYTEnQualty 输出质量BYTEnPitAndFamity 调距和字体族LPCSTRlpszFacename 字体的字符名 CreateFont 成员函数并不能产生新的WindowsGDI字体 它只是从GDI字库中选择一种最近似的可用字体 1 字体的创建 2 字体和字体对话框 CFontDialog类提供了字体及其文本颜色选择的通用对话框 表10 24列出常用的成员函数 LOGFONTf CFontcf CFontDialogd if d DoModal IDOK d GetCurrentFont 2绘制文本 常用文本输出函数 文本的最终输出不仅依赖于文本的字体 而且还跟文本的颜色 对齐方式等有很大关系 CDC类提供了4个输出文本的函数 1 显示文本TextOut 函数TextOut 函数是用当前字体在指定位置 x y 处显示一个文本 virtualBOOLTextOut intx inty LPCTSTRlpszStringintnCount BOOLTextOut intx inty constCString 常用文本输出函数 2 根据制表位 设置字符输出相应位置TabbedTextOut也是用当前字体在指定位置处显示一个文本 但它还根据指定的制表位 Tab 设置相应字符位置 函数成功时返回输出文本的大小 virtualCSizeTabbedTextOut intx inty LPCTSTRlpszStringintnCount intnTabPositions LPINTlpnTabStopPostions intnTabOrigin CSizeTabbedTextOut intx inty constCString 常用文本输出函数 3 DrawText函数是当前字体在指定矩形中对文本进行格式化绘制 virtualintDrawText LPCTSTRlpszString intnCount LPRECTlpRect UINTnFormat intDrawText constCStringnFormat表示文本的格式 如下表所示 可以是其中的常用值之一或 组合 DrawText函数中nFormat的值 常用文本输出示例 10 10 200 140 200 20 停止位为40个单位 停止位为80个单位 停止位为默认值 在C View类的OnDraw CDC pDC 函数中添加绘图代码 CRectrc 10 10 200 140 pDC Rectangle rc pDC DrawText 单行文本居中 rc DT CENTER DT VCENTER DT SINGLELINE 在C View类的OnDraw CDC pDC 函数中添加绘图代码 rc OffsetRect 200 0 将矩形向右偏移200pDC Rectangle rc intnTab 40 将Tab位的值指定为40个逻辑单位pDC TabbedTextOut rc left rc top 绘制 tTab t文本 t示例 1 使用默认的停止位 文本格式化属性 文本的格式属性通常包括文本颜色 对齐方式 字符间隔以及文本调整等 在绘图设备环境中 默认的文本颜色是黑色 而文本背景色为白色 在CDC类中 SetTextColor SetBkColor和SetBkMode函数就是分别用来设置文本颜色 文本背景色和背景模式 而与之相对应的GetTextColor GetBkcolor和GetBkMode函数则是分别获取这三项属性的 SetTextAlign GetTextAlign函数是设置和获取文本对齐方式 文本的对齐方式如P221表7 5所示 文本格式化属性 virtualCOLORREFSetTextColor COLORREFcrColor COLORREFGetTextColor const virtualCOLORREFSetBkColor COLORREFcrColor COLORREFGetBkColor const intSetBkMode intnBkMode intGetBkMode const UINTSetTextAlign UINTnFlags UINTGetTextAlign const 3 字体的应用举例 例6 3 字体的应用程序举例 代码 C View OnDraw 默认的字体pDC TextOut 10 10 默认的字体 设置字体颜色pDC SetTextColor RGB 255 0 0 设置背景色pDC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030创伤性脑损伤治疗行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030减湿器产业行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030农业高科技园行业发展分析及投资战略研究报告
- 2025-2030再生金属行业发展分析及前景趋势与投资研究报告
- 2025-2030全球及中国金属石墨刷行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030全球及中国就业背景筛选软件行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030全球及中国合法人工智能软件行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告
- 2025-2030全球及中国SUV轮毂行业市场现状供需分析及投资评估规划分析研究报告
- 企业贷款居间服务合同标准文本
- 2025-2030儿童服装市场投资前景分析及供需格局研究研究报告
- 中医科物理治疗登记表
- 高山下的花环
- 中医望色望神图集共59张课件
- 蓝色金色心有所盼定有所成励志工作总结计划PPT模板
- 《跋傅给事帖》2020年浙江嘉兴中考文言文阅读真题(含答案与翻译)
- 八年级历史下第一单元复习教案
- 物业小区保洁清洁方案
- 银行从业资格考试题库附参考答案(共791题精心整理)
- 年产20吨阿齐沙坦原料药生产车间的设计和实现材料学专业
- 原地面高程复测记录表正式版
- 沪宁城际接触网专业验收标准
评论
0/150
提交评论