當前位置:首頁 » 編程語言 » c語言關於vga代碼
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言關於vga代碼

發布時間: 2022-07-30 00:32:49

c語言中VGA是什麼意思啊

這是 TurboC 或WinTC里的代碼

繪圖的初始化
gd 是 用開選擇圖形驅動
gm 是 選擇繪圖模式,就是解析度

gd=VGA 是選擇 VGA,現在基本沒有 非VGA顯卡了

⑵ C語言中VGAHI什麼意思

driver=VGA; //適配器類型
mode=VGAHI; //適配器工作模式
他們用來決定屏幕的象素多少和色彩的種類,
相當與windows下的顯示模式

VGAHI 將屏幕調整為VGA模式下的16色,解析度為640*480。

以下資料僅供參考:
Turbo C提供了非常豐富的圖形函數, 所有圖形函數的原型均在graphics. h中, 本節主要介紹圖形模式的初始化、獨立圖形程序的建立。另外, 使用圖形函數時要確保有顯示器圖形驅動程序*BGI, 同時將集成開發環境Options/Linker中的Graphics lib選為on, 只有這樣才能保證正確使用圖形函數。
1. 圖形模式的初始化
不同的顯示器適配器有不同的圖形解析度。即是同一顯示器適配器, 在不同模式下也有不同解析度。因此, 在屏幕作圖之前, 必須根據顯示器適配器種類將顯示器設置成為某種圖形模式, 在未設置圖形模式之前, 微機系統默認屏幕為文本模式(80列, 25行字元模式), 此時所有圖形函數均不能工作。設置屏幕為圖形模式, 可用下列圖形初始化函數:
void far initgraph(int far *gdriver, int far *gmode, char *path);
其中gdriver和gmode分別表示圖形驅動器和模式, path是指圖形驅動程序所在的目錄路徑。有關圖形驅動器、圖形模式的符號常數及對應的解析度見表2。
圖形驅動程序由Turbo C出版商提供, 文件擴展名為.BGI。根據不同的圖形適配器有不同的圖形驅動程序。例如對於EGA、 VGA 圖形適配器就調用驅動程序EGAVGA.BGI。

表2. 圖形驅動器、模式的符號常數及數值
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
圖形驅動器(gdriver) 圖形模式(gmode)
——————————— ——————————— 色調 解析度
符號常數 數值 符號常數 數值
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
CGA 1 CGAC0 0 C0 320*200
CGAC1 1 C1 320*200
CGAC2 2 C2 320*200
CGAC3 3 C3 320*200
CGAHI 4 2色 640*200
———————————————————————————————————
MCGA 2 MCGAC0 0 C0 320*200
MCGAC1 1 C1 320*200
MCGAC2 2 C2 320*200
MCGAC3 3 C3 320*200
MCGAMED 4 2色 640*200
MCGAHI 5 2色 640*480
———————————————————————————————————
EGA 3 EGALO 0 16色 640*200
EGAHI 1 16色 640*350
———————————————————————————————————
EGA64 4 EGA64LO 0 16色 640*200
EGA64HI 1 4色 640*350
———————————————————————————————————
EGAMON 5 EGAMONHI 0 2色 640*350
———————————————————————————————————
IBM8514 6 IBM8514LO 0 256色 640*480
IBM8514HI 1 256色 1024*768
———————————————————————————————————
HERC 7 HERCMONOHI 0 2色 720*348
———————————————————————————————————
ATT400 8 ATT400C0 0 C0 320*200
ATT400C1 1 C1 320*200
ATT400C2 2 C2 320*200
ATT400C3 3 C3 320*200
ATT400MED 4 2色 320*200
ATT400HI 5 2色 320*200
———————————————————————————————————
VGA 9 VGALO 0 16色 640*200
VGAMED 1 16色 640*350
VGAHI 2 16色 640*480
———————————————————————————————————
PC3270 10 PC3270HI 0 2色 720*350
———————————————————————————————————
DETECT 0 用於硬體測試
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

例4. 使用圖形初始化函數設置VGA高解析度圖形模式
#include <graphics.h>
int main()
{
int gdriver, gmode;
gdriver=VGA;
gmode=VGAHI;
initgraph(&gdriver, &gmode, "c:\\tc");
bar3d(100, 100, 300, 250, 50, 1); /*畫一長方體*/
getch();
closegraph();
return 0;
}

有時編程者並不知道所用的圖形顯示器適配器種類, 或者需要將編寫的程序用於不同圖形驅動器, Turbo C提供了一個自動檢測顯示器硬體的函數, 其調用格式為:
void far detectgraph(int *gdriver, *gmode);
其中gdriver和gmode的意義與上面相同。

例5. 自動進行硬體測試後進行圖形初始化
#include <graphics.h>
int main()
{
int gdriver, gmode;
detectgraph(&gdriver, &gmode); /*自動測試硬體*/
printf("the graphics driver is %d, mode is %d\n", gdriver,
gmode); /*輸出測試結果*/
getch();
initgraph(&gdriver, &gmode, "c:\\tc");
/* 根據測試結果初始化圖形*/
bar3d(10, 10, 130, 250, 20, 1);
getch();
closegraph();
return 0;
}

上常式序中先對圖形顯示器自動檢測, 然後再用圖形初始化函數進行初始化設置, 但Turbo C提供了一種更簡單的方法, 即用gdriver= DETECT 語句後再跟initgraph()函數就行了。採用這種方法後, 上例可改為:

例6.
#include <graphics.h>
int main()
{
int gdriver=DETECT, gmode;
initgraph(&gdriver, &gmode, "c:\\tc");
bar3d(50, 50, 150, 30, 1);
getch();
closegraph();
return 0;
}
另外, Turbo C提供了退出圖形狀態的函數closegraph(), 其調用格式為:
void far closegraph(void);
調用該函數後可退出圖形狀態而進入文本方式(Turbo C 默認方式), 並釋放用於保存圖形驅動程序和字體的系統內存。

2. 獨立圖形運行程序的建立
Turbo C對於用initgraph()函數直接進行的圖形初始化程序, 在編譯和鏈接時並沒有將相應的驅動程序(*.BGI)裝入到執行程序, 當程序進行到intitgraph() 語句時, 再從該函數中第三個形式參數char *path中所規定的路徑中去找相應的驅動程序。若沒有驅動程序, 則在C:\TC中去找, 如C:\TC中仍沒有或TC不存在, 將會出現錯誤:
BGI Error: Graphics not initialized (use 'initgraph')
因此, 為了使用方便, 應該建立一個不需要驅動程序就能獨立運行的可執行圖形程序,Turbo C中規定用下述步驟(這里以EGA、VGA顯示器為例):
1. 在C:\TC子目錄下輸入命令:BGIOBJ EGAVGA
此命令將驅動程序EGAVGA.BGI轉換成EGAVGA.OBJ的目標文件。
2. 在C:\TC子目錄下輸入命令:TLIB LIB\GRAPHICS.LIB+EGAVGA
此命令的意思是將EGAVGA.OBJ的目標模塊裝到GRAPHICS.LIB庫文件中。
3. 在程序中initgraph()函數調用之前加上一句:
registerbgidriver(EGAVGA_driver):
該函數告訴連接程序在連接時把EGAVGA的驅動程序裝入到用戶的執行程序中。
經過上面處理,編譯鏈接後的執行程序可在任何目錄或其它兼容機上運行。
假設已作了前兩個步驟,若再向例6中加 registerbgidriver()函數則變成:
例7:
#include<stdio.h>
#include<graphics.h>
int main()
{
int gdriver=DETECT,gmode;
registerbgidriver(EGAVGA_driver): / *建立獨立圖形運行程序 */
initgraph( gdriver, gmode,"c:\\tc");
bar3d(50,50,250,150,20,1);
getch();
closegraph();
return 0;
}
上例編譯鏈接後產生的執行程序可獨立運行。
如不初始化成EGA或CGA解析度, 而想初始化為CGA解析度, 則只需要將上述步驟中有EGAVGA的地方用CGA代替即可。

⑶ 跪求c語言高手

問題全在:&gmode
我沒環境,不能給你說說。

⑷ C語言字模問題

這是個ucdos裡面的字型檔HZK16
,你分析一下他的存放點陣和對應漢字的關系.你先要知道這個點陣字型檔組成方式:

while(*s)

{

qh=*(s)-0xa0;

wh=*(s+1)-0xa0;
/*將那每一個漢字的區位號算出來,一個漢字兩個位元組,分別-a0和成他的區別碼*/
offset=(94*(qh-1)+(wh-1))*32L;
/*94表達漢字有94個區得到對應的在字型檔的位置*32L表一個漢字點32位元組,16*16除8=32/

fseek(fp,offset,SEEK_SET);

fread(buffer,32,1,fp);
/*讀取字型檔到數據組*/

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

for(n=0;n<ROW;n++)

for(j=0;j<2;j++)

for(k=0;k<8;k++)

for(m=0;m<COL;m++)

if (((buffer[i*2+j]>>(7-k))&0x1)!=NULL)

putpixel(x+8*j*COL+k*COL+m,y+i*ROW+n,BLUE);
/*按位元組分解,相加對應的坐標,將對應的0和1過行畫點,1畫點,0不畫*就可以顯陽形漢字,如果相反則可以看到陰形的字/
s+=2;

x+=30;
/*進行相應的放大,和偏移*/

}

getch();

closegraph();

參考:
void ReadCCLIB(unsigned char high,unsigned char low,unsigned char *buf)

{

long p;

high=high-0xa0; /* 將內碼高位元組轉換成區位碼 */

low=low-0xa0; /* 將內碼低位元組轉換成區位碼 */

/* if(high>=15) high-=6; 對壓縮了10-15區的字型檔,要此句.如王碼系統 */

p=(long)((high-1)*94+low-1)*32; /* 計算出漢字在漢字型檔中的起始位置 */

fseek(cclibfp,p,SEEK_SET); /* 字型檔定位 */

fread(buf,sizeof(unsigned char),32,cclibfp); /* 讀字型檔32個位元組 */

}

⑸ 懂C語言的幫忙看看這個漢字顯示代碼的錯誤在哪,謝了

這個是你沒有理解字模和函數的意思。

voiddrawmat(char*mat,intmatsize,intx,inty,intcolor)這個函數要和charzi24[]={/*以下是'字'的24點陣隸書字模72byte*/

搭配著用。

也就是說,你要用字模轉換工具把漢字轉化成char**88[]。然後在把這個放在函數里。

你看你的

drawmat(yi12,12,100,125,WHITE);

yi12是沒有定義的。

而你看示常式序

charzi24[]={/*以下是'字'的24點陣隸書字模72byte*/

charmo24[]={/*以下是'模'的24點陣楷體_GB2312字模

定義了「字」「模」兩個字。

所以函數drawmat(zi24,24,100,125,white)就是正確的。

-----------------------------------------------------------------

這樣說可能你不是很明白,你可以參考一段我寫的程序,下面是鏈接:

http://blog.csdn.net/gracefulphoenix/archive/2010/08/08/5796295.aspx

-------------------------------------------------------------------

另外字模轉換工具在win-tc下就有。如圖。

在超級工具集裡面。

如果還有問題,可以在我的博客下留言。本人非大牛,但是可以一起討論。

----------------------------------------------------------------------

如果你還不明白的,可以看一下這個程序,然後對比一下你的程序。就知道了。

*************************************************************

#include"Conio.h"

#include"graphics.h"

#defineclosegrclosegraph

voidinitgr(void)/*BGI初始化*/

{

intgd=DETECT,gm=0;/*和gd=VGA,gm=VGAHI是同樣效果*/

registerbgidriver(EGAVGA_driver);/*注冊BGI驅動後可以不需要.BGI文件的支持運行*/

initgraph(&gd,&gm,"");

}

voiddrawmat(char*mat,intmatsize,intx,inty,intcolor)

/*依次:字模指針、點陣大小、起始坐標(x,y)、顏色*/

{

inti,j,k,n;

n=(matsize-1)/8+1;

for(j=0;j<matsize;j++)

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

for(k=0;k<8;k++)

if(mat[j*n+i]&(0x80>>k))/*測試為1的位則顯示*/

putpixel(x+i*8+k,y+j,color);

}

charyang12S[]={

/*以下是'陽'的12點陣宋體字模,24byte*/

0xF7,0xC0,0x94,0x40,0x94,0x40,0xA4,0x40,

0xA7,0xC0,0x94,0x40,0x94,0x40,0xF4,0x40,

0x84,0x40,0x87,0xC0,0x84,0x40,0x00,0x00,

};

charguang12S[]={

/*以下是'光'的12點陣宋體字模,24byte*/

0x04,0x00,0x44,0x40,0x24,0x80,0x15,0x00,

0xFF,0xE0,0x12,0x00,0x12,0x00,0x12,0x00,

0x12,0x20,0x22,0x20,0xC1,0xE0,0x00,0x00,

};

intmain(void)

{

inti,j;

initgr();/*BGI初始化*/

setcolor(10);

/*我定義的是"陽光"兩個字,所以,要在主函數前,把陽光這兩個字的字模計算出來。在上面,看到了嗎。*/

drawmat(yang12S,12,100,100,10);/*就是「陽」*/

drawmat(guang12S,12,200,200,10);/*就是"光"*/

getch();/*暫停一下,看看前面繪圖代碼的運行結果*/

closegr();/*恢復TEXT屏幕模式*/

return0;

}

*****************************************************************

⑹ C語言中vga和VGAHI是是什麼意思

vga是video graphics array(視頻圖形陣列適配器)的縮寫,是C語言所支持的一種顯示器適配器.
VGAHI是vga的一種顯示模式,為640*480的高解析度顯示方式.
另外,vga還有640*350的中解析度顯示方式(VGAMED),640*200的低解析度顯示方式(VGALO).

⑺ 關於C語言程序,請大蝦們在每一段的代碼後面幫我做個注釋!我會追加分數的!謝謝!

在直角坐標系下給定直線上兩點,繪制直線,默認為紅色,要求: ,標示出直線在不同區域的顏色,在給定區域內,直線為白色,在區域外直線為黃色

程序是這樣的:
#include <graphics.h>//添加graphics.h頭文件
const int wxl=100,wxr=400,wyb=100,wyt=300;//聲明參
數,即參考區域
typedef struct//定義直線結構體
{
int x1,y1,x2,y2;//聲明變數
}LINE;//LINE現在即為一個過(x1,y1),(x2,y2)的直線

int encode(int x,int y)//編碼,用來判斷點的位置
{
int ret=0;
if(x<wxl) ret|=1<<0;//ret與(1左移0)後相或,標記橫坐//標在區域左側
if(x>wxr) ret|=1<<1;// 左移1,同上右側
if(y<wyb) ret|=1<<2;//左移2,標記縱坐標在區域下側
if(y>wyt) ret|=1<<3;//左移3,同上上側
return ret;
}
//
void midPoint(int x1,int y1,int x2,int y2,int *xn,int *yn)//求(x1,y1),(x2,y2)中點,*xn,*yn分別為指向中點的指針
{
int mx,my,code1,code2;
while(1)
{
mx=(x1+x2)/2;//mx is the middle of x1,x2
my=(y1+y2)/2;//my 同上
if(abs(x1-mx)+abs(y1-my)<3) break;//如果兩點的橫縱坐//標距離之和小於6,即 難以區分,退出
else//否則
{
code1=encode(x1,y1);//對其中一點
code2=encode(mx,my);//及中點編碼
if((code1&code2)!=0)//如果按位相與不為0,即兩點在區域
{//外側,且位於同側
x1=mx;y1=my;//把該點移向中點
}
else//否則
{
x2=mx;y2=my;//把另一點移向中點
}
}
}
*xn=mx;//把中點橫坐標的地址傳給指針*xn
*yn=my;//同上
}
void cs_line(int x1,int y1,int x2,int y2)//編碼並設
{//定顏色
int code1=0,code2=0,mx,my;
int spx,spy,epx,epy;
LINE l;//已知一條直線l
setcolor(0x0c);//設定背景顏色黑色,圖像紅色
line(x1,y1,x2,y2);//畫出l
code1=encode(x1,y1);code2=encode(x2,y2);//判定兩點位//置
if((code1&code2)!=0) return;//如果兩點位於區域外,且//在同側,返回
else if((code1|code2)==0)//如果編碼按位相或等於0,即
{//兩點位於區域內
setcolor(0x0f);//設定背景顏色黑色,圖像白色
line(x1,y1,x2,y2);//畫出直線
}
else//否則
{
midPoint(x1,y1,x2,y2,&spx,&spy);//中點
midPoint(x2,y2,x1,y1,&epx,&epy);//中點
setcolor(0x0f);//設定背景顏色黑色,圖像白色
line(spx,spy,epx,epy);
}
}
void main()
{
int driver,mode,i;//驅動,模式,
driver=VGA;//初始化圖形
mode=VGAHI;//初始化局部變數
detectgraph(&driver,&mode);//檢測VGA卡
initgraph(&driver,&mode,"c:\\tc");//初始化圖形系統
setcolor(0x0e);//設定背景為黑色,圖形為黃色
line(wxl,wyb,wxl,wyt);//以下四句畫出邊框
line(wxl,wyt,wxr,wyt);
line(wxr,wyt,wxr,wyb);
line(wxr,wyb,wxl,wyb);
cs_line(50,50,190,400);//畫出給定直線
cs_line(150,250,320,250);//畫出給定直線
getch();//接受鍵盤輸入
closegraph();//退出圖形
}
能力有限,就能理解這么多了。

⑻ 求詳細解釋C語言主函數中每句話都是啥意思,什麼GD,GM,VGA,都是要實現什麼啊

VGA和VGAHI是int值
在頭文件graphics.h里定義可以用gd來表示VGA,同理用gm表示VGAHI
就像#define WO 2一樣,2可以用WO表示