一个简单的图形软件包.ppt

上传人:za****8 文档编号:16197918 上传时间:2020-09-22 格式:PPT 页数:35 大小:573.58KB
收藏 版权申诉 举报 下载
一个简单的图形软件包.ppt_第1页
第1页 / 共35页
一个简单的图形软件包.ppt_第2页
第2页 / 共35页
一个简单的图形软件包.ppt_第3页
第3页 / 共35页
资源描述:

《一个简单的图形软件包.ppt》由会员分享,可在线阅读,更多相关《一个简单的图形软件包.ppt(35页珍藏版)》请在装配图网上搜索。

1、第三章 一个简单的二维光栅图形软件包,SRGP(Simple Raster Graphics Package) 目的: 了解图形学的基本概念与方法,主要内容,3.1 用图形软件包绘图 3.2 基本的交互处理 3.3 光栅操作,应用 模型,应用 程序,SRGP,图形 硬件 设备,输出流,输入流,3.1 用图形软件包绘图,?图元的声明 ?图元的属性 ?填充图元及属性 ?保存和恢复图元的属性 ?字符,图元的声明 绘图纸,屏幕, 坐标系 扫描转换:将顶点(参数表示的图形)转换为点阵表示的图形,3.1.1 图元的声明,基本图元: 点、直线段、折线、多边形、 圆弧、字符、标记符号。 数据类型: Struc

2、t Point int x, y; typedef int * VertexCoordList; typedef Point *VertexList;,Void PutPixel(int x, int y, int color); /画点函数,color :颜色值。 Void LineCoord(int x0, int y0,int x1,int y1); Void Line (Point *pnt0, Point * pnt1); /画线函数 用端点描述直线段更自然、方便,故定义了一个名为Point的数据类型: Typedef struct int x,yPoint,(1)点、直线段和折线,

3、Void polylineCoord( int vertexCount, VertexCoordList xArray, VertexCoordList yArray); Void polyline(int vertexCount, VertexList vertices) /画折线函数。 vertexCount为顶点个数,xArray,yArray为存储折线顶点的x坐标、y坐标的数组;vertices为Point类型的顶点数组,(2)多边形和矩形,Void PolygonCoord(int vertexCount, VertexCoordList xArray, VertexCoordLis

4、t yArray) Void Polygon(int VertexCount, VertexList vertices); /画多边形。 Void RectangleCoord(int leftX,int bottomY, int rightX, int topX) Void RectanglePoint(Point* leftBottom, Point* rightTop); Void Rectangle(Rectangle *rect) /画矩形 Typedef structpoint leftBottom, rightTop;Rectangle,Void CircleArc(Point

5、*center, int radius, int startAngle,int endAngle) /画圆弧 Void EllipseArc(Rectangle *externRect, int startAngle,int endAngle) /画椭圆,(3)圆弧和椭圆弧,Void MarkerCoord(int x, int y); Void Marker(Point *pt); /端点做标记。 Void PolyMarkerCoord(int vertexCount, VertexCoordList xArray, VertexCoordList yArray) Void PolyMar

6、ker(int vertexCount, VertexList vertices),(4)标记,3.1.2 图元属性,(1)线型和线宽 Void SetLineStyle(enum LineStyle lineStyle); Void SetLineWidth(int lineWidth); 枚举变量 lineStyple 预定义之线型CONTINUOUS、DASHED、DOTTED 图元在显示时被扫描转换成离散的像素写入显存,线型控制可看作有选择地写像素的位屏蔽器(bit marker). -位屏蔽器为0表示帧缓存中相应的像素值不变(即透明),为1表示用线段的颜色值代替帧缓存中相应的像素值。

7、,SetLineWidth(1); LineCoord(55,5,105,295); /line a SetLineStytle(DASHED); SetLineWidth(5); LineCoord(105,5,155,295); /line b SetLineWidth(10); SetLineStytle(DOTTED); LineCoord(155,5,255,295); /line c,SRGP中,设置颜色属性有三种方式: 三种指定颜色的方式 通过查色表索引值 通过颜色名称 通过红、绿、蓝三分量 Void SetColorByName(cnum Colors colorName);

8、/使用逻辑颜色名,实际对应的颜色取决于系统查色表 Void SetColor(int colorIndex); /直接使用整数值来指定,colorIndex即是指向查色表某表项的索引值 Void SetColor(int red, int green, int blue); /直接赋颜色分量值(对真彩色系统而言),(2)颜色,3.1.3 填充图元及其属性,封闭的图元有二种绘制方式 - 线画图:只画出边框; - 填充图:填充其内部区域; Void FillRectangle(Rectangle *rec);/矩形 Void FillPolygon(int vertexCount, VertexL

9、ist Vertices); /多边形 Void FillEllipse(Rectangle * extentRect); / 椭圆 Void FillEllipseArc (Rectangle * extentRect,int startAngle,int endAngle); /扇形,填充方式设置(控制填充图元的外观) Void SetFillStyle(enum FillStyle fillstyle) FillStyle定义如下: enum FillStyle SOILD, /以当前前景色均匀填充图元 BITMAP_PATTERN_OPAQUE, / 以规则排列的位图填充; BITMA

10、P_PATTERN_TRANSPARENT, PIXMAP_ PATTERN /以规则排列的像素图填充; 位图:二值图像 像素图:多值图像 SRGP提供位图/像素图资源表,以规则排列的位图填充 BITMAP_PATTERN_OPAQUE /不透明方式 对应位图中“1”的像素用前景色(即当前设定的颜色) 显示;对应位图中“0”的像素用背景色显示。背景色由函数 void SetBackgroundColor(int colorIndex)设定 BITMAP_PATTERN_TRANSPARENT /透明方式 对应位图中“1”的像素依然用前景色显示;对应位图 中“0”的像素,颜色保持不变。,无论是以

11、位图还是像素图填充图元,图元所呈现的颜色 总依赖于当前系统查色表的内容,因为位图/像素图中保存的仅 仅是颜色的索引值。,3.1.4 保存和恢复图元的属性,目的:为了提高程序的模块化程度 Void InquireAttributes(AttributeGroup *group); Void SetAttributes(AttributeGroup *group); /AttributeGroup 为SRGP定义的结构,其中包括:前景色、背景色、线型、线宽、填充方式、查色表等SRGP支持的所有属性。,3.1.5 字符,属性:字体(宋体,楷体)、字形(粗体,斜体)、字型(7 X 9,16 X 24)

12、、字间距、行间距。 自学P88-90页内容 字符的表示与输出 点阵字符的参数 Void OutText(Point *origin, char *text)/产生一个字符串,其中的x坐标标明串中第一个字符的左边界,y坐标确定基线位置。 Void SetFont(int fontindex) /设置当前的字体和字型,? 基本原则 ? 逻辑输入设备 ? 输入方式 取样方式 事件驱动方式 ? 设置输入方式属性,3.2 基本的交互处理,3.2.1 交互系统设计的基本原则 提供简单一致的交互操作序列;(menu,button) 交互的每一阶段,清晰显示可选项; 样式简洁,选项有层次、简单; 给用户适当的

13、反馈(highlight,光标形状); 允许用户取消操作(Undo),解决方法:菜单、按钮、加亮、变灰、光标变化等等,设备无关性与软件可移植性 SRGP所支持的逻辑输入设备有: 定位设备、键盘设备。 逻辑输入设备到实际物理设备的映射由设备驱动程序完成,3.2.2 逻辑输入设备,取样方法、事件驱动。 取样输入设备的状态,效率不高, 中断驱动:何时处理中断?增加程序设计难度 事件驱动:后台监控程序,事件队列。主动处理。 基于事件驱动方法 的程序结构:,初始化输入设备; do waitEvent(event); switch(event) case EVENT1: procedure1; break

14、; case EVENT2: procedure2; break; ; while (TRUE);,3.2.3 输入方式,设置输入设备的输入方式 Void SetInputMode(enum Device inputDevice, enum InputMode intputMode) 枚举变量Device与InputMode的定义为: enum Device LOCATOR, /定位设备 KEYBOARD, / 键盘设备 ; enum InputMode INACTIVE, /非激活状态 SAMPLE,/取样方式 EVENT;/事件驱动方式,3.2.4 取样方式,定位设备的输入信息分为三部分:

15、 (1)当前光标的位置 (2)各个键的状态(UP or DOWN) (3)哪一个键的状态发生了变化 输入信息数据结构: Typedef struct Point position; /记录光标的位置 enumUP,DOWN buttonChordMAX_BUTTON_COUNT; /记录各个键的当前状态,通常为13个 int buttonOfMostRecentTransition; /指示哪个键改变了状态 LocatorMeasure; 设置为取样方式后,可以这样获取状态信息 Void SampleLocator(LocatorMeasure, *measure),SetInputMode(

16、LOCATOR, SAMPLE) /循环取样直到第一个键的状态为DOWN do SampleLocator(,3.2.5 事件驱动方式,键盘的处理方式:RAW和EDIT Void SetKeyBoardProcessingMode(enum KeyboardMode keyboardMode); 当WaitEvent()返回值为KEYBOARD时,获取键盘内容: Void GetKeyBoard(char *keyMeasure,int bufferSize); keyMeasure用于存放用户输入的字符串,bufferSize指示缓冲区keyMeasure的长度。 定位设备的事件:用户按键、

17、释放键、移动定位设备 获取定位设备事件内容: Void GetLocator(LocatorMeasure *locMeasure); 屏蔽其它键的干扰: Void SetLocatorButtonMask(enum ButtonMask activeButton);,/定位设备反馈方式的设置 Void SetLocatorEchoType(enum EchoType echoType) echoType取值: NO_ECHO 无反馈 CURSOR 光标反馈 / SRGP将各种形状的光标存储 在一张资源表中,通过调用Void SetCursor(int cursorIndex) 来选择所需光标

18、 RUBBER_LINE/RUBBER_RECT 橡胶线/橡胶矩形 橡胶线/橡胶矩形由二点确定:锚点与当前光标点 锚点是固定的,由函数 void SetLocatorEchoRubberAnchor(Point *anchor) 设置。当前光标点的位置随用户的输入而变化。,3.2.6 设置输入设备的属性,定位设备的各种反馈方式示例 p38 图2.11 Void SetLocatorMeasure(Point *position); /设置光标位置,键盘设备无反馈方式这一属性 Void SetKeyboardEchoOrigin(Point *origin) / 设置初始化时屏幕上显示输入字符串

19、的基点 当键盘设备被激活时,缺省的状态为空串。 下面键盘状态设置函数可改变缺省状态: Void SetKeyboardMeasure(char *keyMeasure) / keyMeasure代表一个字符串,3.3 光栅操作,? 画布 ? 裁剪窗 ? 位块拷贝 ? 显示模式,3.3.1 画布(Canvas) 抽象的数据类型,用户可以在其中画图 包括一个像素图和一些控制信息 具有独立的坐标系 系统可以同时有多个画布,只有一个处于激活状态 屏幕是一个特殊的画布 绘图命令的作用对象是处于激活状态的画布,SRGP中用于保存菜单和屏幕 上一块图像的图元称为画布。,3.3.2 裁剪窗口 为什么裁剪? 内

20、裁剪:保留窗口之内的图形 外裁剪:保留窗口之外的图形 void SetClipRectangle(Rectangle *clipRect); 3.3.3 位块拷贝 void CopyPixel(int sourceCanvas, Rectangle *sourceRec, Point *destCorner),3.3.4 显示模式 光栅运算与显示模式 4种简单的显示模式 覆盖/Replace 或/Or 异或/Xor 与/And,二值图像间在各种显示模式下的运算结果,光栅运算,异或的用途:光标的移动,11001001 Xor 11111111 - 00110110 Xor 11111111 - 11001001,光栅运算同样适用于 多值图像,表现为相 应单元间的按位逻辑 运算。,小 结,图元 扫描转换 事件驱动(P33) 裁剪窗口 显示模式及其作用,

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!