为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > DOS界面下通用图形编辑软件的设计计算机论文_工学论文_

DOS界面下通用图形编辑软件的设计计算机论文_工学论文_

2018-03-17 9页 doc 24KB 17阅读

用户头像

is_841159

暂无简介

举报
DOS界面下通用图形编辑软件的设计计算机论文_工学论文_DOS界面下通用图形编辑软件的设计计算机论文_工学论文_ ???资料分享大全-分享无极限??? DOS界面下通用图形编辑软件的设计计算机论文_工学论文 摘要该文介绍了一种建立在DOS界面下生成图素文件的通用图形编辑程序的设计方法。 目前用作DDC的PC总线工控机(IPC)大部分工作在DOS界面上,而DOS不具有像Windows 那样美观方便的图形用户接口(GUI)。生成工艺流程图等复杂图形若用程序设计语言直接编 程需花费大量精力和代码,且不易修改。设计出数据文件小,占用内存少的图形编辑软件是控 制界的一个研究课题。这里...
DOS界面下通用图形编辑软件的设计计算机论文_工学论文_
DOS界面下通用图形编辑软件的设计计算机论文_工学论文_ ???资料分享大全-分享无极限??? DOS界面下通用图形编辑软件的设计计算机论文_工学论文 摘要该文介绍了一种建立在DOS界面下生成图素文件的通用图形编辑程序的设计方法。 目前用作DDC的PC总线工控机(IPC)大部分工作在DOS界面上,而DOS不具有像Windows 那样美观方便的图形用户接口(GUI)。生成工艺图等复杂图形若用程序设计语言直接编 程需花费大量精力和代码,且不易修改。设计出数据文件小,占用内存少的图形编辑软件是控 制界的一个研究课题。这里介绍一种生成图素数据文件的通用图形编辑软件的设计方法。 一、数据结构与数据文件格式 由于所有的操作都基本建立在图素的基础之上,故数据结构也以图素为中心。以下以圆、直线、矩形、字符串为例,其它图素类似。 .定义所需图素 structcircle/*定义圆*/ { intx,y,r;/*圆心,半径*/ charlinecolor,linestyle;/*圆外围线的颜色,线型*/ charfillcolor,fillstyle;/*填充颜色,模式*/ }; structline/*定义直线*/ { intx,y; intx,y; charlinecolor,linestyle,linethick;/*线颜色,模式,粗细*/ }; structbox/*定义矩形*/ { intx,y; intx,y; charlinecolor,linestyle; charfillcolor,fillstyle; }; structstring/*定义字符串*/ { intx,y; charstr[] charbackcolor,dir; charstr-color,str-style; }; . ./*定义其它图素*/ . .将各图素置于一条链之中 typedefstructtagElementList { charElementType;/*标识元素类别*/ intElementID;/*元素标识符,在接口中用来控制其属性*/ uniontagElement{ structcirclecircle; structboxbox; structstringstring; structlineline; . ./*可在此说明其它元素*/ . }Element; structtagElementList*next; }ElementList; 利用这种数据结构可在内存中形成一个图素链表,所有操作都可以此链表为基础。 .定义几个指针,以备各种操作 ElementList*List-head.*List-end,*List-temp,*List-here; .定义一个全局变量,记录图素个数 staticintElementcount=; 图形文件格式为:第一字节(char),表示整个图形的背景颜色;接下来一个字(word),对应于 Elementcount,表示图素个数;后面是内存链表中每个图素的属性值。 二、图形编辑功能的实现 本软件包含的图形编辑功能主要有:作图、修改、移动、删除、复制,下面仅举几例说明实现 的方法。 .作图 以圆为例,其它图形类似。 drawcircle() { inti; chars[],c; intcx,cy,cr; intcls,clc,cfc,cfs; movecursor();/*移动光标,确定圆心*/ cx=cursor-x; cy=cursor-y; movecursor();/*确定半径*/ cr=(int)sqrt((cursor-x-cx)*(cursor-x-cx)+(cursor-y-cy)*(cursor-y-cy); setcolor(WHITE); circle(cx,cy,cr);/*画圆*/ cls=selectlinestyle(); clc=selectcolor("select-line-color"); setcolor(clc); for(i=;i<=cls;i++) circle(cx,cy,cr-i); cfs=selectfillstyle(); cfc=selectcolor("set-fill-color"); setfillstyle(cfs.cfc); floodfill(cx,cy,clc);/*填充*/ temp(ElementList*)malloc(sizeof(ElementList)); temp->ElementType='c'; temp->Element.circle.x=cx; temp->Element.circle.y=cy; temp->Element.circle.r=cr; temp->Element.circle.lcolor=clc; temp->Element.circle.lstyle=cls; temp->Element.circle.fcolor=cfc; temp->Element.circle.fstyle=cfs; addtolist(temp);/*将图素加入图素链表*/ } 其中addtolist()可以如下实现: addtolist(ElementList*Etemp) { if(List-head==NULL) { List-head=Etemp; List-end=Etemp; } else {List-end->next=Etemp; List-end=Etemp; Etemp->next=NULL; } Elementcount++; } .图形的移动、删除、复制功能 以移动为例,首先用箭头键或鼠标框取要移动的区域,区域矩形的左上,右下坐标分别为 (block-x,block-y),(block-x,block-y),然后移动标识矩形到要到达的地方,确定。这样标识矩形的 终止位置与初始位置存在一个偏差,水平与垂直偏差分别为dl-x,dl-y。 接下来搜索内存图素链表,确定每个图素的外接矩形,判断外接矩形是否在初始标识矩形内, 若在,则将该图素的坐标属性值改变dl-x,dl-y。清除图形区,根据新的图素链表作图。 图形的删除功能类似,只需将符合条件的图素从链表中清除,再修改Elementcount值即可。 拷贝图形则只需将符合条件的图素备份一个结点,修改结点的坐标属性值,再将该结点加入链 表,相应增加Elementcount的值。 以下为移动图形的代码。 fnMove() { Rectrect;/*定义的矩形*/ inti; selectblock();/*选择要移动的块*/ moveblock();/*移动块*/ List-temp=List-head; for(i=;inext; } clearscreeen();/*清除作图区*/ drawlink();/*依据图素链表画图*/ } 其中,change()可以实现如下。 change(ElementList*Ctemp,intdl-x,intdl-y) { switch(Ctemp->ElementType) { case'c':Ctemp->Element.circle.x+=dl-x; Ctemp->Element.circle.y+=dl-y; break; case'b':Ctemp->Element.box.x+=dl-x; Ctemp->Element.box.x+=dl-x; Ctemp->Element.box.y+=dl-y; Ctemp->Element.box.y+=dl-y; break; case'l':Ctemp->Element.line.x+=dl-x; Ctemp->Element.line.y+=dl-y; Ctemp->Element.line.x+=dl-x; Ctemp->Element.line.y+=dl-y; break; case's':Ctemp->Element.string.x+=dl-x; Ctemp->Element.string.y+=dl-y; break; . . . } } 三、文件功能的实现 存盘时,打开文件,写入图形的背景颜色,写入图素个数Elementcount,再将内存链表中各图素 的属性值依次写入文件即可。 读盘时,在内存中动态建立图素链表,将文件中的图素属性值依次放入链表中,再根据背景颜 色、图素属性值在屏幕上显示图形。 存盘过程实现如下。 savefile(char*filename) { FILE*fp; inti; List-temp=List-head; Eid=; if((fp=fopen(filename,"w+b"))==NULL) { printf("%s","Cant'topenthefile"); exit(); } fwrite(&back-color,sizeof(char),,fp); fwrite(&Elementcount,sizeof(int),,fp); for(i=;iElementID=Eid; fwrite(List-temp,sizeof(ElementList),,fp); List-temp=List-temp->next; Eid++; } fclose(fp); } 四、应用程序编程接口 应用程序编程接口主要功能是读图形文件并显示,对画面图素进行动态刷新。这些接口均以函数形式出现,供控制应用程序调用。 .draw-chart(char*filename)功能:读图形文件,在内存中建立图素链表,显示图形。 .change-chart(intElement-ID,inthow)功能:改变图素Element-ID的特性,怎样改变由how决定。 该接口能方便地实现图形的动态刷新。 .clear-chart()功能:释放图素链表占用的内存。 .draw(char*filename)功能:不建立链表,边读图形文件,边显示。该函数不占用内存,适用于图素 多、数据文件较大,而又不需动态刷新的图形画面显示。
/
本文档为【DOS界面下通用图形编辑软件的设计计算机论文_工学论文_】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索