招生熱線
0755-86191118 0755-86191118
我的位置: 首頁(yè) > 學(xué)習(xí)專區(qū) > .NET技術(shù) > 應(yīng)用C語(yǔ)言編輯畫圖程序

應(yīng)用C語(yǔ)言編輯畫圖程序

2013-05-28 07:28:11
來(lái)源:
[導(dǎo)讀] 筆者在開(kāi)發(fā)縣級(jí)電網(wǎng)調(diào)度自動(dòng)化系統(tǒng)的過(guò)程中,碰到一個(gè)要繪制電力系統(tǒng)一次接線圖的問(wèn)題 由于電力系統(tǒng)一次接線圖比較復(fù)雜,用一般的編程方法來(lái)

筆者在開(kāi)發(fā)縣級(jí)電網(wǎng)調(diào)度自動(dòng)化系統(tǒng)的過(guò)程中,碰到一個(gè)要繪制電力系統(tǒng)一次接線圖的問(wèn)題.由于電力系統(tǒng)一次接線圖比較復(fù)雜,用一般的編程方法來(lái)繪制比較困難,因此,筆者用C語(yǔ)言開(kāi)發(fā)了一個(gè)手工繪制電力系統(tǒng)一次接線圖的鍵盤繪圖程序,使用該程序繪制的一次接線圖符合用戶需求,效果良好.

一、使用方法

程序中定義了幾個(gè)特殊鍵:

\"V":畫筆提起

\"W":開(kāi)始畫圖

\"R":開(kāi)始擦圖

\"S":當(dāng)前圖形存入文件

\"E":調(diào)出已有文件

\"C":畫圓

程序一運(yùn)行,屏幕上出現(xiàn)一個(gè)黃色的邊框來(lái)設(shè)定畫圖的區(qū)域,區(qū)域中間出現(xiàn)提起的畫筆符號(hào) ,當(dāng)按下"W"鍵時(shí),畫筆符號(hào)變?yōu)?,此時(shí)可移動(dòng)方向鍵(上、下、左、右、左上、左下、右上、右下)來(lái)畫圖;當(dāng)按下"R"鍵時(shí),畫筆符號(hào)變?yōu)?,此時(shí)可移動(dòng)方向鍵來(lái)擦圖;在畫圖過(guò)程中,按下"C"鍵,可畫出一個(gè)半徑為20個(gè)象素點(diǎn)的圓;當(dāng)結(jié)束畫圖時(shí),按下"S"鍵,將畫好的圖形存盤;按下"E"鍵可調(diào)出已有的圖形進(jìn)行編輯.

二、源程序清單

# include \"graphics.h\"

# include \"stdio.h\"

# include \"fcntl.h\"

# include \"stdlib.h\"

main()

void save(),load();

void *wg,*rg,*vg,*fy;

int driver,mode;

int c=RED;

int x=320,y=225;

int x1,y1,x2,y2;

int k,k1,k2;

/* initialize grapher */

detectgraph(&driver,&mode);

initgraph(&driver,&mode,\"c:\\tc\");

/* write the pen */

bar(200,10,206,16);

line(203,7,200,10);

line(203,7,206,10);

line(243,7,240,16);

line(243,7,246,16);

line(283,7,280,10);

line(283,7,286,10);

line(283,7,283,16);

/* save the pen */

wg=malloc(imagesize(200,7,206,16));

rg=malloc(imagesize(240,7,246,16));

vg=malloc(imagesize(280,7,286,16));

fy=malloc(imagesize(200,7,206,16));

getimage(200,7,206,16,wg);

getimage(240,7,246,16,rg);

getimage(280,7,286,16,vg);

cleardevice();

/* write the box */

setcolor(YELLOW);

rectangle(4,19,637,447);

x1=x-3;

y1=y+1;

x2=x+3;

y2=y+10;

getimage(x1,y1,x2,y2,fy);

putimage(x1,y1,vg,XOR_PUT);

/* receive the command */

for (;;)

while (bioskey(1)==0);

k=bioskey(0);

putimage(x1,y1,fy,AND_PUT);

if (((k&0x00ff)|0x00)==0)

k1=k&0xff?0:k>>8; /* k1 is the specialkey value */

else

k2=k&0x00ff; /* k2 is the non-specialkey value */

if (((k&0x00ff)|0x00)==0) /* Special key */

switch(k1)

case 45:

restorecrtmode();

exit(0);

case 72:

if (y>20)

y=y-1;

break;

case 75:

if (x>5)

x=x-1;

break;

case 77:

if (x<636)

x=x+1;

break;

case 80:

if (y<446)

y=y+1;

break;

case 71:

if ((x>5)&&(y>20))

x=x-1;

y=y-1;

break;

case 79:

if ((x>5)&&(y<446))

x=x-1;

y=y+1;

break;

case 73:

if ((x<636)&&(y>20))

x=x+1;

y=y-1;

break;

case 81:

if ((x<636)&&(y<446))

x=x+1;

y=y+1;

break;

x1=x-3;

y1=y+1;

x2=x+3;

y2=y+10;

getimage(x1,y1,x2,y2,fy);

/* non-special key */[Page]

switch(k2)

case 118: /* \'v\' */

case 86: /* \'V\' */

putimage(x1,y1,vg,OR_PUT);

break;

case 119: /* \'w\' */

case 87: /* \'W\' */

putimage(x1,y1,wg,OR_PUT);

putpixel(x,y,c);

break;

case 114: /* \'r\' */

case 82: /* \'R\' */

putimage(x1,y1,rg,OR_PUT);

putpixel(x,y,BLACK);

break;

case 115: /* \'s\' */

case 83: /* \'S\' */

save(\"pic.dat\");

break;

case 101: /* \'e\' */

case 69: /* \'E\' */

load(\"pic.dat\");

break;

case 99: /*\'c\'*/

case 67: /*\'C\'*/

setcolor(RED);

circle(x,y,20);

break;

default:continue;

/* function for screen picture save

*/

void save(char *fname)

FILE *fp;

int i;

register long j;

char far *ptr;

fp=fopen(fname,\"wb\");

for(i=0;i<4;i++)

outportb(0x3CE,4);

outportb(0x3CF,i);

ptr=(char far *) 0xA0000000L;

for (j=0;j<38400L;j++)

putc(*ptr,fp);

ptr++;

fclose(fp);

outportb(0x3CF,0);

/* function for screen picture display

*/

void load(char *fname)

FILE *fp;

register int i;

int k4=1;

register long j;

char far *ptr;

fp=fopen(fname,\"rb\");

for (i=0;i<4;i++)

outportb(0x3C4,2);

outportb(0x3C5,k4);

ptr=(char far *)0xA0000000L;

for (j=0;j<38400L;j++)

*ptr=getc(fp);

ptr++;

k4*=2;

fclose(fp);

outportb(0x3C5,0xF);

三、結(jié)束語(yǔ)

該程序在Turbo C 2.0環(huán)境下運(yùn)行通過(guò),使用效果良好.可以根據(jù)具體需要,對(duì)該程序進(jìn)行擴(kuò)充,以增加繪圖功能.

深圳北大青鳥(niǎo)

評(píng)論
好吊妞免费视频在线观看,久久亚洲国产人成综合网,久久精品国产2020,欧美精品综合在线
欧美日韩精品久久久久免费看 | 真实国产乱子伦对白视频 | 日韩一级在线视频一区 | 亚洲视频视频在线 | 中文字幕亚洲2020在线 | 亚洲乱码一区二区三区在线观看 |