国产一区在线播放_亚洲成在线观看_久热re这里精品视频在线6_亚洲国产精品久久精品怡红院_国产精品久久久久久影视_欧美日韩免费一区_亚洲少妇中出一区_亚洲激情图片小说视频_羞羞答答国产精品www一本_欧美高清视频一区二区_久久精品国产亚洲高清剧情介绍_亚洲女爱视频在线_在线成人激情_国产一区亚洲_欧美大片一区二区三区_伊人精品视频

DOS界面下通用圖形編輯軟件的設計

作者:時間:2010-06-06 02:47:17  來源:百度文庫  閱讀次數:2615次 ]

摘 要 該文介紹了一種建立在DOS界面下生成圖素文件的通用圖形編輯程序的設計方法。
目前用作DDC的PC總線工控機(IPC)大部分工作在DOS界面上,而DOS不具有像Windows那樣美觀方便的圖形用戶接口(GUI)。生成工藝流程圖等復雜圖形若用程序設計語言直接編程需花費大量精力和代碼,且不易修改。設計出數據文件小,占用內存少的圖形編輯軟件是控制界的一個研究課題。這里介紹一種生成圖素數據文件的通用圖形編輯軟件的設計方法。
一、數據結構與數據文件格式
由于所有的操作都基本建立在圖素的基礎之上,故數據結構也以圖素為中心。以下以圓、直線、矩形、字符串為例,其它圖素類似。
1.定義所需圖素
struct circle /*定義圓 */
{
int x,y,r; /* 圓心,半徑 */
char linecolor,linestyle; /* 圓外圍線的顏色,線型 */
char fillcolor,fillstyle; /* 填充顏色,模式 */
};
struct line /* 定義直線 */
{
int x1,y1;
int x2,y2;
char linecolor,linestyle,linethick; /* 線顏色,模式,粗細 */
};
struct box /* 定義矩形 */
{
int x1,y1;
int x2,y2;
char linecolor,linestyle;
char fillcolor,fillstyle;
};
struct string /* 定義字符串 */
{
int x,y;
char str[10]
char backcolor,dir;
char str-color,str-style;
};
.
. /* 定義其它圖素 */
.
2.將各圖素置于一條鏈表之中
typedef struct tagElementList
{
char ElementType; /* 標識元素類別 */
int ElementID; /* 元素標識符,在接口中用來控制其屬性 */
union tagElement {
struct circle circle;
struct box box;
struct string string;
struct line line;
.
. /* 可在此說明其它元素 */
.
}Element;
struct tagElementList *next;
}ElementList;
利用這種數據結構可在內存中形成一個圖素鏈表,所有操作都可以此鏈表為基礎。
3.定義幾個指針,以備各種操作
ElementList *List-head. *List-end,*List-temp, *List-here;
4.定義一個全局變量,記錄圖素個數
static int Elementcount=0;
圖形文件格式為:第一字節(char),表示整個圖形的背景顏色;接下來一個字(word),對應于Elementcount,表示圖素個數;后面是內存鏈表中每個圖素的屬性值。
二、圖形編輯功能的實現
本軟件包含的圖形編輯功能主要有:作圖、修改、移動、刪除、復制,下面僅舉幾例說明實現的方法。
1.作圖
以圓為例,其它圖形類似。
drawcircle()
{
int i;
char s[20],c;
int cx,cy,cr;
int cls,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=0;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 ;
}
2.圖形的移動、刪除、復制功能
以移動為例,首先用箭頭鍵或鼠標框取要移動的區域,區域矩形的左上,右下坐標分別為(block-x1,block-y1),(block-x2,block-y2),然后移動標識矩形到要到達的地方,確定。這樣標識矩形的終止位置與初始位置存在一個偏差,水平與垂直偏差分別為dl-x,dl-y。
接下來搜索內存圖素鏈表,確定每個圖素的外接矩形,判斷外接矩形是否在初始標識矩形內,若在,則將該圖素的坐標屬性值改變dl-x,dl-y。清除圖形區,根據新的圖素鏈表作圖。
圖形的刪除功能類似,只需將符合條件的圖素從鏈表中清除,再修改Elementcount值即可。
拷貝圖形則只需將符合條件的圖素備份一個結點,修改結點的坐標屬性值,再將該結點加入鏈表,相應增加Elementcount的值。
以下為移動圖形的代碼。
fnMove ()
{
Rect rect; /* 定義的矩形 */
int i;
selectblock (); /* 選擇要移動的塊 */
moveblock (); /* 移動塊 */
List-temp=List-head;
for (i=0;i
{
getrect (&rect, List-temp); /* 計算List-temp所指圖素的外接矩形 */
if (inblock(rect.x1,rect.x2,rect.y1.rect.y2))
/* 判斷外接矩形是否在所選塊內 */
change (List-temp, dl-x,dl-y);
/* 改變圖素的坐標屬性 */
List-temp=List-temp->next;
}
clearscreeen (); /* 清除作圖區 */
drawlink (); /* 依據圖素鏈表畫圖 */
}
其中,change ( )可以實現如下。
change(ElementList *Ctemp, int dl-x,int dl-y)
{
switch (Ctemp->ElementType)
{
case 'c': Ctemp->Element.circle.x =dl-x;
Ctemp->Element.circle.y =dl-y;
break;
case 'b': Ctemp->Element.box.x1 =dl-x;
Ctemp->Element.box.x2 =dl-x;
Ctemp->Element.box.y1 =dl-y;
Ctemp->Element.box.y2 =dl-y;
break;
case 'l': Ctemp->Element.line.x1 =dl-x;
Ctemp->Element.line.y1 =dl-y;
Ctemp->Element.line.x2 =dl-x;
Ctemp->Element.line.y2 =dl-y;
break;
case 's': Ctemp->Element.string.x =dl-x;
Ctemp->Element.string.y =dl-y;
break;
.
.
.
}
}

三、文件功能的實現
存盤時,打開文件,寫入圖形的背景顏色,寫入圖素個數Elementcount,再將內存鏈表中各圖素的屬性值依次寫入文件即可。

讀盤時,在內存中動態建立圖素鏈表,將文件中的圖素屬性值依次放入鏈表中,再根據背景顏色、圖素屬性值在屏幕上顯示圖形。
存盤過程實現如下。
savefile(char * filename)
{
FILE *fp;
int i;
List-temp=List-head;
Eid=0;
if((fp=fopen(filename,"w b"))==NULL)
{
printf ("%s", "Cant't open the file ");
exit(1);
}
fwrite(&back-color, sizeof(char),1,fp);
fwrite(&Elementcount,sizeof(int),1,fp);
for(i=0;i
{ List-temp->ElementID=Eid;
fwrite(List-temp,sizeof(ElementList),1,fp);
List-temp=List-temp->next;
Eid ;
}
fclose(fp);
}
四、應用程序編程接口
應用程序編程接口主要功能是讀圖形文件并顯示,對畫面圖素進行動態刷新。這些接口均以函數形式出現,供控制應用程序調用。
1.draw-chart (char * filename)功能:讀圖形文件,在內存中建立圖素鏈表,顯示圖形。
2.change-chart(int Element-ID, int how)功能:改變圖素Element-ID的特性,怎樣改變由how決定。該接口能方便地實現圖形的動態刷新。
3.clear-chart( )功能:釋放圖素鏈表占用的內存。
4.draw ( char * filename)功能:不建立鏈表,邊讀圖形文件,邊顯示。該函數不占用內存,適用于圖素多、數據文件較大,而又不需動態刷新的圖形畫面顯示。

本站論文資源均為來自網絡轉載,免費提供給廣大作者參考,不進行任何贏利,如有版權問題,請聯系管理員刪除! 快速論文發表網(www.784755.com)本中心和國內數百家期刊雜志社有良好的合作關系,可以幫客戶代發論文投稿.

投稿郵箱:ksfbw@126.com
客服Q  Q: 論文發表在線咨詢82702382
聯系電話:15295038833

本站論文資源均為來自網絡轉載,免費提供給廣大作者參考,不進行任何贏利,如有版權問題,請聯系管理員刪除!

廣告推薦

文章評論

共有 0 位網友發表了評論

閱讀排行

推薦文章

最新文章

国产一区在线播放_亚洲成在线观看_久热re这里精品视频在线6_亚洲国产精品久久精品怡红院_国产精品久久久久久影视_欧美日韩免费一区_亚洲少妇中出一区_亚洲激情图片小说视频_羞羞答答国产精品www一本_欧美高清视频一区二区_久久精品国产亚洲高清剧情介绍_亚洲女爱视频在线_在线成人激情_国产一区亚洲_欧美大片一区二区三区_伊人精品视频
日韩网站在线观看| 亚洲欧洲av一区二区三区久久| 亚洲欧美日韩天堂| 欧美日韩另类国产亚洲欧美一级| 欧美性猛交xxxx乱大交退制版| 欧美aa国产视频| 欧美日韩成人免费| 亚洲欧洲美洲综合色网| 亚洲一区二区在线免费观看视频| 国产一区二区三区最好精华液| 国产中文一区| 美女福利精品视频| 国产精品―色哟哟| 午夜精品久久久久久久久久久久| 欧美一区日韩一区| 欧美日韩一区三区四区| 欧美日韩国产区| 久久夜色精品国产亚洲aⅴ| 欧美精品三级| 在线不卡中文字幕| 免费不卡中文字幕视频| 欧美亚洲一区二区三区| 久久精品视频免费| 国产精品久久久久久久电影| 国产亚洲欧美另类中文| 国产精品一区二区三区四区五区| 亚洲国产日韩精品| 亚洲欧美精品在线观看| 亚洲欧美视频在线观看| 91久久精品美女高潮| 久久99在线观看| 欧美日韩国产色站一区二区三区| 可以看av的网站久久看| 小黄鸭精品aⅴ导航网站入口| 欧美日韩精品免费观看视一区二区| 最新国产精品拍自在线播放| 亚洲人成人77777线观看| 亚洲精品美女久久7777777| 亚洲欧美日韩视频二区| 欧美中文字幕在线观看| 欧美日韩亚洲视频| 久久99伊人| 在线观看国产欧美| 韩国欧美国产1区| 亚洲一区二区免费视频| 欧美激情视频在线免费观看 欧美视频免费一| 欧美一区二区三区视频免费播放| 亚洲欧美日韩视频二区| 欧美精品在线网站| 免费视频最近日韩| 一区二区精品在线| 黑人巨大精品欧美一区二区小视频| 香蕉久久精品日日躁夜夜躁| 欧美日韩www| 免费不卡在线观看av| 91久久在线播放| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲免费在线观看| av成人老司机| 在线观看三级视频欧美| 国产精品亚洲美女av网站| 国产女人水真多18毛片18精品视频| 亚洲国产精品99久久久久久久久| 女同性一区二区三区人了人一| 国产欧美精品va在线观看| 午夜精品国产更新| 亚洲二区三区四区| 亚洲在线国产日韩欧美| 久久久九九九九| 国产精品成人观看视频免费| 国产女人18毛片水18精品| 国产精品揄拍500视频| 国产精品成人免费| 雨宫琴音一区二区在线| 亚洲精品国产日韩| 欧美色图五月天| 亚洲欧洲日本国产| 精品动漫3d一区二区三区| 亚洲国产三级在线| 亚洲人成毛片在线播放女女| 午夜一区二区三视频在线观看| 欧美一区二区高清在线观看| 一区二区在线观看视频| 免费久久99精品国产自在现线| 久久婷婷激情| 欧美午夜在线观看| 欧美色网一区二区| 欧美激情一区二区三区在线视频观看| 欧美视频一区在线观看| 亚洲素人一区二区| 欧美国产在线视频| 亚洲精品欧美| 国内偷自视频区视频综合| 欧美在线免费一级片| 在线观看成人av电影| 国产精品久久久久久福利一牛影视| 欧美精品 日韩| 日韩视频永久免费| 亚洲日本中文字幕| 国产欧美一区二区三区在线看蜜臀| 亚洲第一在线视频| 欧美日韩免费精品| 亚洲私人影吧| 欧美在线视频免费播放| 宅男噜噜噜66一区二区66| 欧美激情亚洲视频| 在线观看一区| 夜夜夜精品看看| 美腿丝袜亚洲色图| 国产在线欧美| 国产一区二区精品久久| 亚洲一区二区影院| 亚洲欧美成人一区二区三区| 国产精品久久久久9999吃药| 欧美在线黄色| 狠狠色狠狠色综合日日小说| 久久久久国内| 国产精品久久一级| 香蕉成人啪国产精品视频综合网| 麻豆9191精品国产| 亚洲激情视频网站| 日韩写真视频在线观看| 国产网站欧美日韩免费精品在线观看| 99在线视频精品| 久久久久免费| 国产亚洲人成a一在线v站| 国产一区在线观看视频| 亚洲免费人成在线视频观看| 亚洲午夜影视影院在线观看| 欧美美女日韩| 欧美一区二区播放| 国产伦精品一区二区三区| 激情小说亚洲一区| 国内精品久久久久久久果冻传媒| 国产精品另类一区| 欧美日韩久久精品| 午夜日韩电影| 国产欧美一区二区三区久久| 欧美日韩在线播放| 亚洲欧美制服另类日韩| 在线看欧美日韩| 久久精品一区二区三区不卡牛牛| 影音先锋日韩精品| 欧美精品免费播放| 欧美一区二区视频在线观看| 久久久五月婷婷| 亚洲国产黄色片| 欧美日韩一区二区三区免费| 亚洲视频在线观看三级| 国产精品一区二区在线观看| 欧美1区视频| 亚洲二区三区四区| 亚洲精品一区二区网址| 黑人极品videos精品欧美裸| 黄色工厂这里只有精品| 国产在线精品一区二区中文| 欧美日韩国产bt| 国产精品中文在线| 久久一日本道色综合久久| 国产日韩精品视频一区二区三区| 91久久久久久| 日韩亚洲精品电影| 久久视频这里只有精品| 久久综合色天天久久综合图片|