閱讀屋>圖形影象/多媒體> Turbo C在圖形狀態下快速顯示彩色漢字的方法

Turbo C在圖形狀態下快速顯示彩色漢字的方法

關於Turbo C在圖形狀態下快速顯示彩色漢字的方法

  在用Turbo C提供的圖形函式進行作圖時,為了使螢幕顯示更加直觀明瞭,常常需要在圖形顯示的同時,顯示必要的漢字說明,Turbo C在圖形狀態下快速顯示彩色漢字的方法。這時Turbo C提供的一些函式就不能用了。

  在漢字作業系統中,有一個16×16點陣的漢字型檔,主要用於螢幕顯示。字型檔中的漢字按16×16點陣模式儲存,即每個漢字相當於16×16=256個點組成。佔用16×2=32個連續的位元組單元。位元組的每一位(bit)表示一個點的屬性:1表示亮點,0表示暗點。連續的兩個位元組表示該漢字字模的一行。32個位元組的排列順序如圖:

  @@T5S08100.GIF;圖1@@

  計算機對西文字符采用一個位元組表示,我國規定漢字用內碼(2個位元組)表示。為了保證中西文相容,也就是說,漢字系統的內碼必須同時允許ASCII碼和漢字的'同時使用,而兩者之間不能發生衝突。目前規定每個位元組只用七位,若兩個位元組的最高位均為1,則該字元為漢字。

  國標對漢字型檔的結構作了統一的規定:即將漢字型檔分為若干個區,每個區有94個漢字。

  每一個漢字在字型檔中有一個固定的區和位,即每一個漢字有一個區位碼。知道了區位碼也就相當於知道了漢字在字型檔中的位置。由於漢字的內碼與區位碼有一定的關係,所以,只要透過內碼就可以得到區位碼,從而也就得到了漢字的字模。

  設一個漢字的內碼為ddff,則此漢字的區碼為dd-161;位碼為ff-161;該漢字字模的第一個位元組在字型檔中的位置是(94×區碼 位碼)×32。這時只要連續的讀出32個位元組,就可以得到該漢字的字模。

  有些文章和書籍採用寫點的方式來處理這32個位元組。即某位為1,則寫點,某位為0,則不寫點。如果這樣處理,則每個漢字需迴圈256次,寫256個點,字數越多,則會顯得很慢。

  Turbo C提供了這樣兩個函式:

  setlinestyle(int linestyle,unsignedupattern,int thickness);

  line(int x0,int y0,int x1,int y1);

  setlinestyle函式為設定線型函式,當linestyle取USERBIT-LINE且thickness取NORM-WIDTH時,其後的line函式就會按upattern的16位二進位制數畫一點寬的線,計算機論文《Turbo C在圖形狀態下快速顯示彩色漢字的方法》。upattern的每一位代表一個象元,如果那位為1,則該象元開啟,否則該象元關閉。

  我們在讀字模的時候可以一次讀2個位元組,形成一個16位的二進位制數,把此二進位制數設為upattern,然後畫線。這樣只需迴圈16次就可寫完一個漢字。速度得到很大的提高。尤其在字數較多時,更體現出此方法的優勢。

  以下為用畫線的方法在西文狀態下顯示漢字的函式,在Turbo C 1.0、DOS6.0、相容386機上執行透過。

  #include

  #include

  #include

  FILE *stream; //設 stream為全程變數//

  void open-file

  {//開啟漢字型檔函式,使用的漢字型檔為UCDOS的16點陣字型檔:HZK16//

  if((stream=fopen("hzk16","rb"))==NULL)

  { printf("Can't Open File HZK16"); exit(1);}

  }

  void close-file

  {//關閉漢字型檔函式//

  fclose(stream); return;

  }

  void write16(unsigned char *word,int x,int y,int wd,int col)

  {//word為所要顯示的漢字串,x,y為要顯示漢字的起始座標,wd為兩個漢字//

  //之間的間隔,col為要顯示漢字的顏色.//

  register int k,i;

  unsigned char cw[33];

  char c[2];

  unsigned long int qu-ma,wei-ma;

  setcolor(col);settextstyle(0,HORIZ-DIR,1);

  for(k=0;word[k]!='/0';k =2)

【Turbo C在圖形狀態下快速顯示彩色漢字的方法】相關文章: