點陣漢字顯示

2021-04-24 03:52:04 字數 2442 閱讀 7385

陣漢字顯示

目錄:dos下的點陣漢字

漢字的內碼

漢字字模

漢字型檔檔案

列印字型檔檔案和hzk12

文件內容:

dos下的點陣漢字

你是否碰到過用啟動盤啟動系統後用dir命令得到一串串莫名其妙的字元?有經驗的朋友會告訴你:那是漢字。漢字?你不禁會問:怎麼乙個我乙個也不認識。但那確確實實是漢字,如果你啟動ucdos或其他的漢字系統後,就會看到那是乙個個熟悉的漢字。同樣是漢字,為什麼前後會看到不同的結果?呵呵,其實在電腦硬體中,根本沒有漢字這個概念,也沒有英文的概念,這鐵玩意認識的概念只有——內碼。

漢字的內碼

點頭表示什麼?是「對」、「yes」,偏偏有的地方表示的意義卻恰恰相反。乙個動作,有不同的詮釋;乙個問題,有不同的答案;而乙個符號,卻有不同的意義,關鍵在於:你是如何地理解。在電腦中亦如此,所有的資料都是以0和1儲存的,按不同的資料操作,可以得到不同的結果。對於顯示英文操作,由於英文本母種類很少,只需要8位(一位元組)即可。而對於中文,常用卻有5000以上,於是我們的dos前輩想了乙個辦法,就是將ascii表的高128個很少用到的數值以兩個為一組來表示漢字,即漢字的內碼。而剩下的低128位則留給英文本元使用,即英文的內碼。不信,你可以用記事本寫一c檔案:

main()

printf("/nchinease char=");

s=c;

while(*s!=0)

getch();

}再用tc輸入*.txt開啟執行,看見了沒有,那些數值即英文和漢字的各位元組內碼。

漢字字模

得到了漢字的內碼後,還僅是一組數字,那又如何在螢幕上去顯示呢?這就涉及到文字的字模,字模雖然也是一組數字,但它的意義卻與數字的意義有了根本的變化,它是用數字的各位資訊來記載英文或漢字的形狀,如英文的'a'在字模中是這樣記載的:

而中文的「你」在字模中卻是這樣記載的:

在硬體系統內,英文的字模資訊一般固化在rom裡,即使在沒有進入系統的cmos裡,也可以讓你看到英文本元。而在dos下,中文的字模資訊一般記錄在漢字型檔檔案hzk16裡。

漢字型檔檔案

了解字母和漢字是按字模位資訊顯示的原理後,那如何得到漢字的字模資訊呢?難道要我們自己去做?no。dos前輩們經過艱辛的努力,將製作好的字模放到了乙個個標準的庫中以免去後輩的麻煩,這就是點陣字型檔檔案。一般我們使用16*16的點陣宋體字庫,所謂16*16,是每乙個漢字在縱、橫各16點的區域內顯示的。不過後來又有了hzk12、hzk24,hzk32和hzk48字型檔及黑體、楷體和隸書字型檔。雖然漢字型檔種類繁多,但都是按照區位的順序排列的。前乙個位元組為該漢字的區號,後乙個位元組為該字的位號。每乙個區記錄94個漢字,位號則為該字在該區中的位置。因此,漢字在漢字型檔中的具體位置計算公式為:94*(區號-1)+位號-1。減1是因為陣列是以0為開始而區號位號是以1為開始的。這僅為以漢字為單位該漢字在漢字型檔中的位置,那麼,如何得到以位元組為單位得到該漢字在漢字型檔中的位置呢?只需乘上乙個漢字字模占用的位元組數即可,即:(94*(區號-1)+位號-1)*乙個漢字字模占用位元組數,而按每種漢字型檔的漢字大小不同又會得到不同的結果。以16*16點陣字型檔為例,計算公式則為:(94*(區號-1)+(位號-1))*32。漢字型檔文該從該位置起的32位元組資訊即記錄了該字的字模資訊。

漢字型檔檔案

了解點陣漢字及漢字型檔的構成原理後,顯示漢字就變得簡單。以16*16點陣字型檔為例,通常的方法是:將檔案工作指標移到需要的漢字字模處、將漢字型檔檔案讀入一2*16陣列再用for迴圈一位位地顯示。以使用vgahi模式顯示「我」字為例,程式如下:

#include "graphics.h"

#include "stdio.h"

main()

怎麼樣?只要掌握了正確的方法,顯示漢字並不複雜。

列印字型檔檔案和hzk12

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

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

if((0x80>>i%8)&mat[j][i/8]) /*轉置顯示*/

putpixel(j+x,y+i,color);

還有一類字型檔hzk12,雖然屬於標準字型檔型別,但如果你將它的字模當作12*12位計算的話,根本無法正常顯示漢字。因為字型檔設計者為了使用的方便,字摸每行的位數均補齊為8的整數倍,於是實際該字型檔的位長度是16*12,雖然每行都多出了4位,但這4位都是0(不顯示),並不影響顯示效果。

點陣漢字顯示

由於turbo c應用於dos作業系統下,在使用turbo c進行程式設計時,一般情況下只好使用英文進行人機互動。要是想直接用中文介面,就需要另想他法了。如果使用中文dos系統 如ucdos 則可以解決在字元介面下的漢字顯示問題。也就是說,可以用printf或其他字串函式來輸出漢字。但是,這樣仍然有...

點陣漢字顯示

由於turbo c應用於dos作業系統下,在使用turbo c進行程式設計時,一般情況下只好使用英文進行人機互動。要是想直接用中文介面,就需要另想他法了。如果使用中文dos系統 如ucdos 則可以解決在字元介面下的漢字顯示問題。也就是說,可以用printf或其他字串函式來輸出漢字。但是,這樣仍然有...

什麼是點陣漢字

所謂乙個字的點陣.其實就是指這個漢字用多少個象素點來描述.每個象素點顯示為什麼顏色,通常情況下,hzk16採用的是16 16點陣,即256個象素點描述乙個漢字.這些點的顏色分為兩種,一種是前景色,一種是顯示為背景色.那麼,關於那些點顯示為前景色,那些點顯示為背景色,是如何得知的呢?可以這樣來考慮,你...