青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

點(diǎn)陣字庫(kù)的生產(chǎn)原理

所有的漢字或者英文都是下面的原理,
由左至右,每8個(gè)點(diǎn)占用一個(gè)字節(jié),最后不足8個(gè)字節(jié)的占用一個(gè)字節(jié),而且從最高位向最低位排列。
生成的字庫(kù)說(shuō)明:(以12×12例子)


一個(gè)漢字占用字節(jié)數(shù):12÷8=1····4也就是占用了2×12=24個(gè)字節(jié)。
編碼排序A0A0→A0FE A1A0→A2FE依次排列。
以12×12字庫(kù)的“我”為例:“我”的編碼為CED2,所以在漢字排在CEH-AOH=2EH區(qū)的D2H-A0H=32H個(gè)。所以在12×12字庫(kù)的起始位置就是[{FE-A0}*2EH+32H]*24=104976開(kāi)始的24個(gè)字節(jié)就是我的點(diǎn)陣模。
其他的類(lèi)推即可。
英文點(diǎn)陣也是如此推理。

在DOS程序中使用點(diǎn)陣字庫(kù)的方法

回到頂部

    首先需要理解的是點(diǎn)陣字庫(kù)是一個(gè)數(shù)據(jù)文件,在這個(gè)數(shù)據(jù)文件里面保存了所有文字的點(diǎn)陣數(shù)據(jù).至于什么是點(diǎn)陣,我想我不講大家都知道 的,使用過(guò)"文曲星"之類(lèi)的電子辭典吧,那個(gè)的液晶顯示器上面顯示的漢子就能夠明顯的看出"點(diǎn)陣"的痕跡.在 PC 機(jī)上也是如此,文字也是由點(diǎn)陣來(lái)組成了,不同的是,PC機(jī)顯示器的顯示分辨率更高,高到了我們?nèi)庋蹮o(wú)法區(qū)分的地步,因此"點(diǎn)陣"的痕跡也就不那么明顯了.

    點(diǎn)陣、矩陣、位圖這三個(gè)概念在本質(zhì)上是有聯(lián)系的,從某種程度上來(lái)講,這三個(gè)就是同義詞.點(diǎn)陣從本質(zhì)上講就是單色位圖,他使用一個(gè)比特來(lái)表示一個(gè)點(diǎn),如果這 個(gè)比特為0,表示某個(gè)位置沒(méi)有點(diǎn),如果為1表示某個(gè)位置有點(diǎn).矩陣和位圖有著密不可分的聯(lián)系,矩陣其實(shí)是位圖的數(shù)學(xué)抽象,是一個(gè)二維的陣列.位圖就是這種 二維的陣列,這個(gè)陣列中的 (x,y) 位置上的數(shù)據(jù)代表的就是對(duì)原始圖形進(jìn)行采樣量化后的顏色值.但是,另一方面,我們要面對(duì)的問(wèn)題是,計(jì)算機(jī)中數(shù)據(jù)的存放都是一維的,線性的.因此,我們需要 將二維的數(shù)據(jù)線性化到一維里面去.通常的做法就是將二維數(shù)據(jù)按行順序的存放,這樣就線性化到了一維.

    那么點(diǎn)陣字的數(shù)據(jù)存放細(xì)節(jié)到底是怎么樣的呢.其實(shí)也十分的簡(jiǎn)單,舉個(gè)例子最能說(shuō)明問(wèn)題.比如說(shuō) 16*16 的點(diǎn)陣,也就是說(shuō)每一行有16個(gè)點(diǎn),由于一個(gè)點(diǎn)使用一個(gè)比特來(lái)表示,如果這個(gè)比特的值為1,則表示這個(gè)位置有點(diǎn),如果這個(gè)比特的值為0,則表示這個(gè)位置沒(méi) 有點(diǎn),那么一行也就需要16個(gè)比特,而8個(gè)比特就是一個(gè)字節(jié),也就是說(shuō),這個(gè)點(diǎn)陣中,一行的數(shù)據(jù)需要兩個(gè)字節(jié)來(lái)存放.第一行的前八個(gè)點(diǎn)的數(shù)據(jù)存放在點(diǎn)陣數(shù) 據(jù)的第一個(gè)字節(jié)里面,第一行的后面八個(gè)點(diǎn)的數(shù)據(jù)存放在點(diǎn)陣數(shù)據(jù)的第二個(gè)字節(jié)里面,第二行的前八個(gè)點(diǎn)的數(shù)據(jù)存放在點(diǎn)陣數(shù)據(jù)的第三個(gè)字節(jié)里面,…,然后后 面的就以此類(lèi)推了.這樣我們可以計(jì)算出存放一個(gè)點(diǎn)陣總共需要32個(gè)字節(jié).看看下面這個(gè)圖形化的例子:

    | |1| | | | | | | | | | |1| | | |

    | | |1|1| |1|1|1|1|1|1|1|1|1| | |

    | | | |1| | | | | | | | |1| | | |

    |1| | | | | |1| | | | | |1| | | |

    | |1|1| | | |1| | | | | |1| | | |

    | | |1| | | |1| | | | |1| | | | |

    | | | | |1| | |1| | | |1| | | | |

    | | | |1| | | |1| | |1| | | | | |

    | | |1| | | | | |1| |1| | | | | |

    |1|1|1| | | | | | |1| | | | | | |

    | | |1| | | | | |1| |1| | | | | |

    | | |1| | | | |1| | | |1| | | | |

    | | |1| | | |1| | | | | |1| | | |

    | | |1| | |1| | | | | | |1|1|1| |

    | | | | |1| | | | | | | | |1| | |

    | | | | | | | | | | | | | | | | |

    可以看出這是一個(gè)"漢"字的點(diǎn)陣,當(dāng)然文本的方式效果不是很好.根據(jù)上面的原則,我們可以寫(xiě)出這個(gè)點(diǎn)陣的點(diǎn)陣數(shù) 據(jù):0x40,0x08,0x37,0xfc,0x10,0x08,…, 當(dāng)然寫(xiě)這個(gè)確實(shí)很麻煩所以我不再繼續(xù)下去.我這樣做,也只是為了向你說(shuō)明,在點(diǎn)陣字庫(kù)中,每一個(gè)點(diǎn)陣的數(shù)據(jù)就是按照這種方式存放的.

    當(dāng)然也存在著不規(guī)則的點(diǎn)陣,這里說(shuō)的不規(guī)則,指的是點(diǎn)陣的寬度不是8的倍數(shù),比如 12*12 的點(diǎn)陣,那么這樣的點(diǎn)陣數(shù)據(jù)又是如何存放的呢?其實(shí)也很簡(jiǎn)單,每一行的前面8個(gè)點(diǎn)存放在一個(gè)字節(jié)里面,每一行的剩下的4點(diǎn)就使用一個(gè)字節(jié)來(lái)存放,也就是說(shuō) 剩下的4個(gè)點(diǎn)將占用一個(gè)字節(jié)的高4位,而這個(gè)字節(jié)的低4位沒(méi)有使用,全部都默認(rèn)的為零.這樣做當(dāng)然顯得有點(diǎn)浪費(fèi),不過(guò)卻能夠便于我們進(jìn)行存放和尋址.對(duì)于 其他不規(guī)則的點(diǎn)陣,也是按照這個(gè)原則進(jìn)行處理的.這樣我們可以得出一個(gè) m*n 的點(diǎn)陣所占用的字節(jié)數(shù)為 (m+7)/8*n.

    在明白了以上所講的以后,我們可以寫(xiě)出一個(gè)顯示一個(gè)任意大小的點(diǎn)陣字模的函數(shù),這個(gè)函數(shù)的功能是輸出一個(gè)寬度為w,高度為h的字模到屏幕的 (x,y) 坐標(biāo)出,文字的顏色為 color,文字的點(diǎn)陣數(shù)據(jù)為 pdata 所指:

    /*輸出字模的函數(shù)*/

    void _draw_model(char *pdata, int w, int h, int x, int y, int color)

    {

    int     i;    /* 控制行 */

    int     j;    /* 控制一行中的8個(gè)點(diǎn) */

    int     k;    /* 一行中的第幾個(gè)"8個(gè)點(diǎn)"了 */

    int     nc;   /* 到點(diǎn)陣數(shù)據(jù)的第幾個(gè)字節(jié)了 */

    int     cols; /* 控制列 */

    BYTE    static mask[8]={128, 64, 32, 16, 8, 4, 2, 1}; /* 位屏蔽字 */

    w = (w + 7) / 8 * 8; /* 重新計(jì)算w */

    nc = 0;

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

    {

    cols = 0;

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

    {

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

    {

    if (pdata[nc]&mask[j])

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

    cols++;

    }

    nc++;

    }

    }

    }

    代碼很簡(jiǎn)單,不用怎么講解就能看懂,代碼可能不是最優(yōu)化的,但是應(yīng)該是最易讀懂的.其中的 putpixel 函數(shù),使用的是TC提供的 Graphics 中的畫(huà)點(diǎn)函數(shù).使用這個(gè)函數(shù)就可以完成點(diǎn)陣任意大小的點(diǎn)陣字模的輸出.

    接下來(lái)的問(wèn)題就是如何在漢子庫(kù)中尋址某個(gè)漢子的點(diǎn)陣數(shù)據(jù)了.要解決這個(gè)問(wèn)題,首先需要了解漢字在計(jì)算機(jī)中是如何表示的.在計(jì)算機(jī)中英文可以使用 ASCII 碼來(lái)表示,而漢字使用的是擴(kuò)展 ASCII 碼,并且使用兩個(gè)擴(kuò)展 ASCII 碼來(lái)表示一個(gè)漢字.一個(gè) ASCII 碼使用一個(gè)字節(jié)表示,所謂擴(kuò)展 ASCII 碼,也就是 ASCII 碼的最高位是1的 ASCII 碼,簡(jiǎn)單的說(shuō)就是碼值大于等于 128 的 ASCII 碼.一個(gè)漢字由兩個(gè)擴(kuò)展 ASCII 碼組成,第一個(gè)擴(kuò)展 ASCII 碼用來(lái)存放區(qū)碼,第二個(gè)擴(kuò)展 ASCII 碼用來(lái)存放位碼.在 GB2312-80 標(biāo)準(zhǔn)中,將所有的漢字分為94個(gè)區(qū),每個(gè)區(qū)有94個(gè)位可以存放94個(gè)漢字,形成了人們常說(shuō)的區(qū)位碼,這樣總共就有 94*94=8836 個(gè)漢字.在點(diǎn)陣字庫(kù)中,漢字點(diǎn)陣數(shù)據(jù)就是按照這個(gè)區(qū)位的順序來(lái)存放的,也就是最先存放的是第一個(gè)區(qū)的漢字點(diǎn)陣數(shù)據(jù),在每一個(gè)區(qū)中有是按照位的順序來(lái)存放 的.在漢字的內(nèi)碼中,漢字區(qū)位碼的存放實(shí)在擴(kuò)展 ASCII 基礎(chǔ)上存放的,并且將區(qū)碼和位碼都加上了32,然后存放在兩個(gè)擴(kuò)展 ASCII 碼中.具體的說(shuō)就是:

    第一個(gè)擴(kuò)展ASCII碼 = 128+32 + 漢字區(qū)碼

    第二個(gè)擴(kuò)展ASCII嗎 = 128+32 + 漢字位碼

    如果用char hz[2]來(lái)表示一個(gè)漢字,那么我可以計(jì)算出這個(gè)漢字的區(qū)位碼為:

    區(qū)碼 = hz[0] - 128 - 32 = hz[0] - 160

    位碼 = hz[1] - 128 - 32 = hz[1] - 160.

    這樣,我們可以根據(jù)區(qū)位碼在文件中進(jìn)行殉職了,尋址公式如下:

    漢字點(diǎn)陣數(shù)據(jù)在字庫(kù)文件中的偏移 = ((區(qū)碼-1) * 94 + 位碼) * 一個(gè)點(diǎn)陣字模占用的字節(jié)數(shù)

    在尋址以后,即可讀取漢字的點(diǎn)陣數(shù)據(jù)到緩沖區(qū)進(jìn)行顯示了.以下是實(shí)現(xiàn)代碼:

    /* 輸出一個(gè)漢字的函數(shù) */

    void _draw_hz(char hz[2], FILE *fp, int x, int y, int w, int h, int color)

    {

    char fONtbuf[128];   /* 足夠大的緩沖區(qū),也可以動(dòng)態(tài)分配 */

    int ch0 = (BYTE)hz[0]-0xA0; /* 區(qū)碼 */

    int ch1 = (BYTE)hz[1]-0xA0; /* 位碼 */

    /* 計(jì)算偏移 */

    long offset = (long)pf->_hz_buf_size * ((ch0 - 1) * 94 + ch1 - 1);

    fseek(fp, offset, SEEK_SET);              /* 進(jìn)行尋址 */

    fread(fontbuf, 1, (w + 7) / 8 * h, fp);   /* 讀入點(diǎn)陣數(shù)據(jù) */

    _draw_model(fontbuf, w, h, x, y, color); /* 繪制字模 */

    }

    以上介紹完了中文點(diǎn)陣字庫(kù)的原理,當(dāng)然還有英文點(diǎn)陣字庫(kù)了.英文點(diǎn)陣字庫(kù)中單個(gè)點(diǎn)陣字模數(shù)據(jù)的存放方式與中文是一模一樣的,也就是對(duì)我們所寫(xiě)的 _draw_model 函數(shù)同樣可以使用到英文字庫(kù)中.唯一不同的是對(duì)點(diǎn)陣字庫(kù)的尋址上.英文使用的就是 ASCII 碼,其碼值是0到127,尋址公式為:

    英文點(diǎn)陣數(shù)據(jù)在英文點(diǎn)陣字庫(kù)中的偏移 = 英文的ASCII碼 * 一個(gè)英文字模占用的字節(jié)數(shù)

    可以看到,區(qū)分中英文的關(guān)鍵就是,一個(gè)字符是 ASCII 碼還是擴(kuò)展 ASCII 碼,如果是 ASCII 碼,其范圍是0到127,這樣是使用的英文字庫(kù),如果是擴(kuò)展 ASCII 碼,則與其后的另一個(gè)擴(kuò)展 ASCII 碼組成漢字內(nèi)碼,使用中文字庫(kù)進(jìn)行顯示.只要正確區(qū)分 ASCII 碼的類(lèi)型并進(jìn)行分別的處理,也就能實(shí)現(xiàn)中英文字符串的混合輸出了.

點(diǎn)陣字庫(kù)和矢量字庫(kù)的差別

回到頂部

    我們都只知道,各種字符在電腦屏幕上都是以一些點(diǎn)來(lái)表示的,因此也叫點(diǎn)陣.最早的字庫(kù)就是直接把這些點(diǎn)存儲(chǔ)起來(lái),就是點(diǎn)陣字庫(kù).常見(jiàn)的漢字點(diǎn)陣字庫(kù)有 16x16, 24x24 等.點(diǎn)陣字庫(kù)也有很多種,主要區(qū)別在于其中存儲(chǔ)編碼的方式不同.點(diǎn)陣字庫(kù)的最大缺點(diǎn)就是它是固定分辨率的,也就是每種字庫(kù)都有固定的大小尺寸,在原始尺寸下使用,效果很好,但如果將其放大或縮小使用,效果就很糟糕了,就會(huì)出現(xiàn)我們通常說(shuō)的鋸齒現(xiàn)象.因?yàn)樾枰淖煮w大小組合有無(wú)數(shù)種,我們也不可能為每種大小都定義一個(gè)點(diǎn)陣字庫(kù).于是就出現(xiàn)了矢量字庫(kù).

    矢量字庫(kù)

    矢量字庫(kù)是把每個(gè)字符的筆劃分解成各種直線和曲線,然后記下這些直線和曲線的參數(shù),在顯示的時(shí)候,再根據(jù)具體的尺寸大小,畫(huà)出這些線條,就還原了原來(lái)的字符.它的好處就是可以隨意放大縮小而不失真.而且所需存儲(chǔ)量和字符大小無(wú)關(guān).矢量字庫(kù)有很多種,區(qū)別在于他們采用的不同數(shù)學(xué)模型來(lái)描述組成字符的線條.常見(jiàn)的矢量字庫(kù)有 Type1字庫(kù)和Truetype字庫(kù).

    在點(diǎn)陣字庫(kù)中,每個(gè)字符由一個(gè)位圖表示(如圖2.5所示),并把它用一個(gè)稱(chēng)為字符掩膜的矩陣來(lái)表示,其中的每個(gè)元素都是一位二進(jìn)制數(shù),如果該位為1表示字符的筆畫(huà)經(jīng)過(guò)此位,該像素置為字符顏色;如果該位為0,表示字符的筆畫(huà)不經(jīng)過(guò)此位,該像素置為背景顏色.點(diǎn)陣字符的顯示分為兩步:首先從字庫(kù)中將它的位圖檢索出來(lái),然后將檢索到的位圖寫(xiě)到幀緩沖器中.

    在實(shí)際應(yīng)用中,同一個(gè)字符有多種字體(如宋體、楷體等),每種字體又有多種大小型號(hào),因此字庫(kù)的存儲(chǔ)空間十分龐大.為了減少存儲(chǔ)空間,一般采用壓縮技術(shù).

    矢量字符記錄字符的筆畫(huà)信息而不是整個(gè)位圖,具有存儲(chǔ)空間小,美觀、變換方便等優(yōu)點(diǎn).例如:在AutoCAD中使用圖形實(shí)體-形(Shape)-來(lái)定義矢量字符,其中,采用了直線和圓弧作為基本的筆畫(huà)來(lái)對(duì)矢量字符進(jìn)行描述. 對(duì)于字符的旋轉(zhuǎn)、放大、縮小等幾何變換,點(diǎn)陣字符需要對(duì)其位圖中的每個(gè)象素進(jìn)行變換,而矢量字符則只需要對(duì)其幾何圖素進(jìn)行變換就可以了,例如:對(duì)直線筆畫(huà)的兩個(gè)端點(diǎn)進(jìn)行變換,對(duì)圓弧的起點(diǎn)、終點(diǎn)、半徑和圓心進(jìn)行變換等等.

    矢量字符的顯示也分為兩步.首先從字庫(kù)中將它的字符信息.然后取出端點(diǎn)坐標(biāo),對(duì)其進(jìn)行適當(dāng)?shù)膸缀巫儞Q,再根據(jù)各端點(diǎn)的標(biāo)志顯示出字符.

    輪廓字形法是當(dāng)今國(guó)際上最流行的一種字符表示方法,其壓縮比大,且能保證字符質(zhì)量.輪廓字形法采用直線、B樣條/Bezier曲線的集合來(lái)描述一個(gè)字符的輪廓線.輪廓線構(gòu)成一個(gè)或若干個(gè)封閉的平面區(qū)域.輪廓線定義加上一些指示橫寬、豎寬、基點(diǎn)、基線等等控制信息就構(gòu)成了字符的壓縮數(shù)據(jù).

如何使用Windows的系統(tǒng)字庫(kù)生成點(diǎn)陣字庫(kù)?

回到頂部

    我的程序現(xiàn)在只能預(yù)覽一個(gè)漢字的不同字體的點(diǎn)陣表達(dá).

    界面很簡(jiǎn)單:   一個(gè)輸出點(diǎn)陣大小的選擇列表(8x8,16x16,24x24等),一個(gè)系統(tǒng)中已有的字體名稱(chēng)列表,一個(gè)預(yù)覽按鈕,一塊畫(huà)圖顯示區(qū)域.

    得到字體列表的方法:(作者稱(chēng)這一段是用來(lái)取回系統(tǒng)的字體,然后添加到下拉框中)

    //取字體名稱(chēng)列表的回調(diào)函數(shù),使用前要聲明一下該方法

    int   CALLBACK   MyEnumFONtProc(ENUMLOGFONTEX*   lpelf,NEWTEXTMETRICEX*   lpntm,DWORD   nFontType,long   lParam)

    {

    CFontPeekerDlg*   pWnd=(CFontPeekerDlg*)   lParam;

    if(pWnd)

    {

    if(   pWnd->m_combo_sfont.FindSTring(0,   lpelf->elfLogFont.lfFaceName)   <0   )

    pWnd->m_combo_sfont.AddString(lpelf->elfLogFont.lfFaceName);

    return   1;

    }

    return   0;

    }

    //說(shuō)明:CFontPeekerDlg   是我的dialog的類(lèi)名,   m_combo_sfont是列表名稱(chēng)下拉combobox關(guān)聯(lián)的control變量

    //調(diào)用的地方     (******問(wèn)題1:下面那個(gè)&lf怎么得到呢……)

    {

    ::EnumFontFamiliesEx((HDC)   dc,&lf,   (FONTENUMPROC)MyEnumFontProc,(LPARAM)   this,0);

    m_combo_sfont.SetCurSel(0);

    }

    字體預(yù)覽:

    如果點(diǎn)陣大小選擇16,顯示的時(shí)候就畫(huà)出16x16個(gè)方格.自定義一個(gè)類(lèi)CMyStatic繼承自CStatic,用來(lái)畫(huà)圖.在CMyStatic的OnPaint()函數(shù)中計(jì)算并顯示.

    取得字體:

    常用的方法:用CreateFont創(chuàng)建字體,把字TextOut再用GetPixel()取點(diǎn)存入數(shù)組.   缺點(diǎn):必須把字TextOut出來(lái),能在屏幕上看見(jiàn),不爽.

    我的方法,用這個(gè)函數(shù):GetGlyphOutline(),可以得到一個(gè)字的輪廓矢量或者位圖.可以不用textout到屏幕,直接取得字模信息

    函數(shù)原型如下:

    DWORD   GetGlyphOutline(

    HDC   hdc,                     //畫(huà)圖設(shè)備句柄

    UINT   uChar,                 //將要讀取的字符/漢字

    UINT   uFormat,             //返回?cái)?shù)據(jù)的格式(字的外形輪廓還是字的位圖)

    LPGLYPHMETRICS   lpgm,     //   GLYPHMETRICS結(jié)構(gòu)地址,輸出參數(shù)

    DWORD   cbBuffer,       //輸出數(shù)據(jù)緩沖區(qū)的大小

    LPVOID   lpvBuffer,     //輸出數(shù)據(jù)緩沖區(qū)的地址

    CONST   MAT2   *lpmat2   //轉(zhuǎn)置矩陣的地址

    );

    說(shuō)明:

    uChar字符需要判斷是否是漢字還是英文字符.中文占2個(gè)字節(jié)長(zhǎng)度.

    lpgm是輸出函數(shù),調(diào)用GetGlyphOutline()是無(wú)須給lpgm   賦值.

    lpmat2如果不需要轉(zhuǎn)置,將   eM11.value=1;   eM22.value=1;   即可.

    cbBuffer緩沖區(qū)的大小,可以先通過(guò)調(diào)用GetGlyphOutline(……lpgm,   0,   NULL,   mat);   來(lái)取得,然后動(dòng)態(tài)分配lpvBuffer,再一次調(diào)用GetGlyphOutline,將信息存到lpvBuffer.   使用完畢后再釋放lpvBuffer.

    程序示例:(***問(wèn)題2:用這段程序,我獲取的字符點(diǎn)陣總都是一樣的,不管什么字……)

    ……前面部分省略……

    GLYPHMETRICS   glyph;

    MAT2   m2;

    memset(&m2,   0,   sizeof(MAT2));

    m2.eM11.value   =   1;

    m2.eM22.value   =   1;

    //取得buffer的大小

    DWORD   cbBuf   =   dc.GetGlyphOutline(   nChar,   GGO_BITMAP,   &glyph,   0L,   NULL,   &m2);

    BYTE*   pBuf=NULL;

    //返回GDI_ERROR表示失敗.

    if(   cbBuf   !=   GDI_ERROR   )

    {

    pBuf   =   new   BYTE[cbBuf];

    //輸出位圖GGO_BITMAP   的信息.輸出信息4字節(jié)(DWORD)對(duì)齊

    dc.GetGlyphOutline(   nChar,   GGO_BITMAP,   &glyph,   cbBuf,   pBuf,   &m2);

    }

    else

    {

    if(m_pFont!=NULL)

    delete   m_pFont;

    return;

    }

    編程中遇到問(wèn)題:

    一開(kāi)始,GetGlyphOutline總是返回-1,getLastError顯示是"無(wú)法完成的功能",后來(lái)發(fā)現(xiàn)是因?yàn)檎{(diào)用之前沒(méi)有給hdc設(shè)置Font.

    后來(lái)能取得pBuf信息后,又開(kāi)始郁悶,因?yàn)椴惶靼譩itmap的結(jié)果是按什么排列的.后來(lái)跟蹤漢字"一"來(lái)調(diào)試(這個(gè)字簡(jiǎn)單),注意到了glyph.gmBlackBoxX   其實(shí)就是輸出位圖的寬度,glyph.gmBlackBoxY就是高度.如果gmBlackBoxX=15,glyph.gmBlackBoxY=2,表示輸出的pBuf中有這些信息:位圖有2行信息,每一行使用15   bit來(lái)存儲(chǔ)信息.

    例如:我讀取"一":glyph.gmBlackBoxX   =   0x0e,glyph.gmBlackBoxY=0x2;     pBuf長(zhǎng)度cbBuf=8   字節(jié)

    pBuf信息:       00   08   00   00   ff   fc   00   00

    字符寬度   0x0e=14     則   第一行信息為:           0000   0000   0000   100       (只取到前14位)

    第二行根據(jù)4字節(jié)對(duì)齊的規(guī)則,從0xff開(kāi)始         1111   1111   1111   110

    看出"一"字了嗎?呵呵

    直到他的存儲(chǔ)之后就可以動(dòng)手解析輸出的信息了.

    我定義了一個(gè)宏#define   BIT(n)     (1<<(n))     用來(lái)比較每一個(gè)位信息時(shí)使用

    后來(lái)又遇到了一個(gè)問(wèn)題,就是小頭和大頭的問(wèn)題了.在我的機(jī)器上是little   endian的形式,如果我用

    unsigned   long   *lptr   =   (unsigned   long*)pBuf;

    //j   from   0   to   15

    if(   *lptr   &   BIT(j)   )

    {

    //這時(shí)候如果想用j來(lái)表示寫(xiě)1的位數(shù),就錯(cuò)了

    }

    因?yàn)閺淖止?jié)數(shù)組中轉(zhuǎn)化成unsigned   long型的時(shí)候,數(shù)值已經(jīng)經(jīng)過(guò)轉(zhuǎn)化了,像上例中,實(shí)際上是0x0800   在同BIT(j)比較.

    不多說(shuō)了,比較之前轉(zhuǎn)化一下就可以了if(   htonl(*lptr)   &   BIT(j)   )

Unicode中文點(diǎn)陣字庫(kù)的生成與使用

回到頂部

    點(diǎn)陣字庫(kù)包含兩部分信息.首先是點(diǎn)陣字庫(kù)文件頭信息,它包含點(diǎn)陣字庫(kù)文字的字號(hào)、多少位表示一個(gè)像素,英文字母與符號(hào)的size、起始和結(jié)束unicode編碼、在文件中的起始偏移,漢字的size、起始和結(jié)束unicode編碼、在文件中的起始偏移.然后是真實(shí)的點(diǎn)陣數(shù)據(jù),即一段段二進(jìn)制串,每一串表示一個(gè)字母、符號(hào)或漢字的點(diǎn)陣信息.

    要生成點(diǎn)陣字庫(kù)必須有文字圖形的來(lái)源,我的方法是使用ttf字體.ttf字體的顯示采用的是SDL_ttf庫(kù),這是開(kāi)源圖形庫(kù)SDL的一個(gè)擴(kuò)展庫(kù),它使用的是libfreetype以讀取和繪制ttf字體.

    它提供了一個(gè)函數(shù),通過(guò)傳入一個(gè)Unicode編碼便能輸出相應(yīng)的文字的帶有alpha通道的位圖.那么我們可以掃描這個(gè)位圖以得到相應(yīng)文字的點(diǎn)陣信息.由于帶有alpha通道,我們可以在點(diǎn)陣信息中也加入權(quán)值,使得點(diǎn)陣字庫(kù)也有反走樣效果.我采用兩位來(lái)表示一個(gè)點(diǎn),這樣會(huì)有三級(jí)灰度(還有一個(gè)表示透明).

    點(diǎn)陣字庫(kù)的顯示首先需要將文件頭信息讀取出來(lái),然后根據(jù)unicode編碼判斷在哪個(gè)區(qū)間內(nèi),然后用unicode編碼減去此區(qū)間的起始unicode編碼,算出相對(duì)偏移,并加上此區(qū)間的文件起始偏移得到文件的絕對(duì)偏移,然后讀出相應(yīng)位數(shù)的數(shù)據(jù),最后通過(guò)掃描這段二進(jìn)制串,在屏幕的相應(yīng)位置輸出點(diǎn)陣字型.

    顯示點(diǎn)陣字體需要頻繁讀取文件,因此最好做一個(gè)固定大小的緩存,采用LRU置換算法維護(hù)此緩存,以減少磁盤(pán)讀取.

標(biāo)準(zhǔn)點(diǎn)陣字庫(kù)芯片

回到頂部

標(biāo)準(zhǔn)點(diǎn)陣字庫(kù)芯片的特點(diǎn):

    1.內(nèi)涵全國(guó)信標(biāo)委授權(quán)的標(biāo)準(zhǔn)點(diǎn)陣字型數(shù)據(jù)、

    2.支持國(guó)標(biāo)字符集GB2312(6,763漢字),GB18030(27,484漢字).

    3.支持多種點(diǎn)陣字型,包括11×12點(diǎn),15×16點(diǎn),24×24點(diǎn),32×32點(diǎn).

    4.免除了字庫(kù)燒錄和測(cè)試工序,并節(jié)省了2%以上的燒錄損耗.

    5.價(jià)格相當(dāng)于空白FLASH價(jià)格

標(biāo)準(zhǔn)點(diǎn)陣字庫(kù)芯片的種類(lèi)和應(yīng)用

回到頂部

51單片機(jī)的13×14點(diǎn)陣縮碼漢卡

回到頂部

    我們歷時(shí)數(shù)載,開(kāi)發(fā)成"51單片機(jī)13×14點(diǎn)陣縮碼漢卡",適用于目前國(guó)內(nèi)外應(yīng)用最為廣泛的MCSX-51及其兼容系列單片機(jī).

    與此同時(shí),還開(kāi)發(fā)了13×14點(diǎn)陣漢字字模.13×14點(diǎn)陣字模,可完全與目前通用的16×16點(diǎn)陣漢字字模媲美,其在單片機(jī)和嵌入式系統(tǒng)的漢字顯示應(yīng)用中也具有明顯的經(jīng)濟(jì)價(jià)值和實(shí)用意義.

    1.單片機(jī)目前的漢字顯示

    信息交流的最主要方式之一即文字交流,但由于我國(guó)方塊漢字?jǐn)?shù)量繁多,構(gòu)形迥異,使?jié)h字顯示一直是我國(guó)計(jì)算機(jī)普及的障礙.隨著計(jì)算機(jī)技術(shù)的迅速發(fā)展,PC機(jī)的漢字顯示已不成問(wèn)題.但對(duì)于成本低、體積小、應(yīng)用靈活且用量極為巨大的單片機(jī)而言,因其結(jié)構(gòu)簡(jiǎn)單,硬件資源十分有限,其漢字顯示仍面對(duì)著捉襟見(jiàn)肘,力不從心的窘境.

    目前單片機(jī)的漢字顯示有三種基本方法.

    ①采用標(biāo)準(zhǔn)字庫(kù)法.即將國(guó)標(biāo)漢字庫(kù)固人ROM中,將單片機(jī)的硬件和軟件進(jìn)行特別擴(kuò)展后以顯示漢字.眾所周知,即使是16×16點(diǎn)陣標(biāo)準(zhǔn)字庫(kù),也須占用200KB以上的單元內(nèi)存,而就目前主流5l系列單片機(jī)而言,最大尋址范圍僅64KB,即使程序區(qū)與數(shù)據(jù)區(qū)合起來(lái)也僅128KB內(nèi)存.因此,若不加特別的擴(kuò)展設(shè)計(jì),不要說(shuō)檢字程序和用戶(hù)空間,僅字庫(kù)都裝不下.這種方法雖然可以方便地使用現(xiàn)成標(biāo)準(zhǔn)字庫(kù),但卻需占用大量的硬件和軟件資源,增加很大一部分成本和設(shè)計(jì)難度,所以不經(jīng)常使用.

    ②字模直接固化法.即將所顯示的漢字,依先后順序?qū)⑵渥帜R灰粡臉?biāo)準(zhǔn)字庫(kù)中提取后,重新固化,予以顯示.此法雖為簡(jiǎn)捷,但只適于顯示少量漢字,且字模的制取繁瑣,軟件的修改維護(hù)都很困難.

    ③帶索引小字庫(kù)法.即將欲顯示文件中的漢字字模,從標(biāo)準(zhǔn)字庫(kù)中逐一提取固化,制成小型字庫(kù),并按其在小字庫(kù)中的位置制成索引表,顯示時(shí)從索引表查出其新的字模取碼地址,取碼顯示.此方法雖比較靈活,可顯示較多的漢字,但仍然局限于只能顯示固定文件內(nèi)容,且字模制取同樣麻煩.

    一種較新的單片機(jī)"漢字動(dòng)態(tài)編碼與顯示方案"(見(jiàn)《單片機(jī)與嵌入式系統(tǒng)應(yīng)用》雜志

    由上可見(jiàn),目前單片機(jī)各種漢字顯示方案均不理想.標(biāo)準(zhǔn)字庫(kù)法,單片機(jī)不堪重負(fù);而其它方法最大且又無(wú)法克服的缺點(diǎn)是,所顯示文字皆有局限.顯示內(nèi)容也皆須專(zhuān)業(yè)人員設(shè)計(jì)而定,用戶(hù)難于更改.這便極大地限制了單片機(jī)在各個(gè)領(lǐng)域的開(kāi)拓和應(yīng)用.究其原因,皆為單片機(jī)本身無(wú)漢卡,而這也正是我們致力于"51漢卡"開(kāi)發(fā)的初衷.

    2.13×14點(diǎn)陣漢字字模

    為墊定"5l漢卡"的字型基礎(chǔ),首先開(kāi)發(fā)成了l3×14點(diǎn)陣漢字字模.在目前通用的漢字字模中,最簡(jiǎn)單的是16×16點(diǎn)陣字模.在微型打字機(jī)中,也偶見(jiàn)有12×12點(diǎn)陣字模,但實(shí)用中不多見(jiàn).字模點(diǎn)陣數(shù)直接決定著每一漢字所占單元內(nèi)存值,能否在保證字模準(zhǔn)確、美觀的基礎(chǔ)上,尋找一種較少的點(diǎn)陣字模呢?這便是我們最初的想法.于是我們經(jīng)過(guò)反復(fù)選擇比較,終于在國(guó)內(nèi)首個(gè)推出了13×14點(diǎn)陣字模.此設(shè)計(jì),一是基于我國(guó)漢字為方塊字,故其行、列值需相近;二是漢字多有對(duì)稱(chēng)1生,故其列值宜奇不宜偶.設(shè)計(jì)實(shí)際表明,若行、列值很少,則難保證字模的準(zhǔn)確性和美觀性.?

    13×14點(diǎn)陣字模,是以我國(guó)現(xiàn)行簡(jiǎn)化字為準(zhǔn),并在此基礎(chǔ)上設(shè)計(jì)而成.與目前通用的漢字16×l6點(diǎn)陣字模相比,其準(zhǔn)確性和美觀性并不遜色.然而其單字所占內(nèi)存卻由32個(gè)單元降至26個(gè)單元;另外使得每個(gè)單字顯示由原來(lái)的256個(gè)像素降至l82個(gè)像素,使顯示成本和空間均減少近三分之一.100×200點(diǎn)陣LED字屏,可顯示16×l6點(diǎn)陣漢字72個(gè),而l3×14點(diǎn)陣漢字便可顯示l05個(gè),且顯示效果并無(wú)太大差異.這無(wú)疑對(duì)單片機(jī)和嵌入式系統(tǒng)漢字顯示產(chǎn)品的開(kāi)發(fā)和應(yīng)用,具有明顯的經(jīng)濟(jì)價(jià)值和實(shí)用意義.

    3.51單片機(jī)13×14點(diǎn)陣縮碼漢卡

    "51漢卡"依據(jù)我國(guó)的漢字特點(diǎn)和單片機(jī)的快速構(gòu)字功能,在13×14點(diǎn)陣字?;A(chǔ)上,以縮碼形式開(kāi)發(fā)而成單片機(jī)漢卡的開(kāi)發(fā),應(yīng)以目前通用的主流單片機(jī)為研發(fā)對(duì)象,還應(yīng)在囊括國(guó)標(biāo)一、二級(jí)漢字及常用字符的前提下,使內(nèi)存占用必須降至主流單片機(jī)可尋址范圍內(nèi),且需留有足夠的檢字程序和用戶(hù)應(yīng)用空間.另外,字模設(shè)計(jì)必須準(zhǔn)確、美觀.字模提取速度也必須滿(mǎn)足實(shí)用要求."51漢卡"的開(kāi)發(fā)正是依據(jù)原則,并達(dá)到了以上各項(xiàng)要求.

    顧名思義,"51漢卡,即以MCS-51系列及其兼容單片機(jī)為研發(fā)對(duì)象.以51系列為代表的8位單片機(jī),在過(guò)去、現(xiàn)在以及可以予見(jiàn)的將來(lái),都將是嵌入式系統(tǒng)低端應(yīng)用的主流機(jī)型.此乃業(yè)界專(zhuān)家的共識(shí).

    "51漢卡"囊括了"GB2312-80"國(guó)標(biāo)字庫(kù)的全部一、二級(jí)漢字,并增補(bǔ)漢字86個(gè);同時(shí)包括了大、小英文字母、阿拉伯?dāng)?shù)字等160個(gè)常用字符和不到4KB的構(gòu)字程序,卻僅總共占用了不足66KB的內(nèi)存.每字平均約占9.8個(gè)單元,相對(duì)于16×16點(diǎn)陣每字占32單兀內(nèi)存而言,尚不到其三分之一.這對(duì)于具有相互獨(dú)立的64KB程序區(qū)和64KB數(shù)據(jù)區(qū)的51系列單片機(jī)而言,若適當(dāng)配置內(nèi)存,可為檢字程序和用戶(hù)留出90%以上的程序空間及相當(dāng)數(shù)量的數(shù)據(jù)空間,對(duì)于一般用戶(hù)的應(yīng)用,都將綽綽有余.

    另外,為使"51漢卡''更便于使用和進(jìn)一步節(jié)省內(nèi)存,在上述基礎(chǔ)上又開(kāi)發(fā)成一套簡(jiǎn)化版本,刪去了部分較偏僻的二級(jí)漢字.簡(jiǎn)化版本包括約5580個(gè)漢字,共占用內(nèi)存58KB.實(shí)際上,按有關(guān)權(quán)威部門(mén)的統(tǒng)計(jì),一般文本99%的文字是由2400個(gè)字寫(xiě)成的,因此使用簡(jiǎn)化版本,并配以簡(jiǎn)單的造字程序,一般亦可滿(mǎn)足我們的使用要求.

    "51漢卡"所用字模,即我們開(kāi)發(fā)的完全可與16×16點(diǎn)陣字模媲美的I3×14點(diǎn)陣漢字字模.字模提取速度是我們最為關(guān)心的問(wèn)題之一.經(jīng)測(cè)試及實(shí)際使用表明,"51漢卡''的提模速度完全可滿(mǎn)足單片機(jī)漢字顯示的實(shí)用要求.

    我們使用INTEL公司MCS-51經(jīng)典系列87C51單片機(jī)在24MHz頻率下測(cè)試,平均字模提取速度為2.1ms/字.因人的視覺(jué)暫留時(shí)間為0.1s,無(wú)論理論還是實(shí)際使用都表明,50字字模提取并顯示,并無(wú)遲滯和待機(jī)之感.即使在1?2MHz頻率下,20字取模,即點(diǎn)即出,在一般拼音檢字和少量漢字顯示中,完全可滿(mǎn)足使用要求.隨著單片機(jī)技術(shù)的迅速發(fā)展,目前,INTEL公司、Atmel公司、philips公司、我國(guó)臺(tái)灣華邦等公司生產(chǎn)的MCS-51兼容單片機(jī)時(shí)鐘頻率可達(dá)33MHz,增強(qiáng)型可達(dá)40MHz,以至達(dá)60MHz;現(xiàn)市售的"STC89LE"系列單片機(jī),最高頻率可達(dá)90MHz.這些芯片都完全能與MCS-51芯片兼容,對(duì)于更高需求的場(chǎng)合,更新升級(jí)也十分簡(jiǎn)便.另外,在單片機(jī)和嵌入式系統(tǒng)中,文字顯示速度要求并不高,只要滿(mǎn)足換屏?xí)r的視覺(jué)要求即可.其漢字顯示字?jǐn)?shù),一般也不太多.如用LCD顯示屏,128×64點(diǎn)陣,才顯示32個(gè)字;192×64點(diǎn)陣才顯48個(gè)字;即使使用l3×14點(diǎn)陣字模,滿(mǎn)屏也才56個(gè)漢字.

    4."51漢卡"設(shè)計(jì)依據(jù)及說(shuō)明

    "51漢卡"設(shè)計(jì)依據(jù)是,我國(guó)漢字雖然數(shù)量繁多,字型各異,但其中復(fù)合結(jié)構(gòu)者占大部分,并素有"偏旁取義,正字取音"之說(shuō).如"寸"字與不同偏旁可組成"村"、"付"、"討"、"守"、"過(guò)"等字.因此"51漢卡"除單結(jié)構(gòu)字基本以全碼設(shè)計(jì)外,復(fù)臺(tái)結(jié)構(gòu)字多用相應(yīng)的單體字及其偏旁,以結(jié)構(gòu)代碼寫(xiě)成.利用單片機(jī)快速的單元積木式構(gòu)字程序,便可迅速生成字模代碼.這既保證了提碼速度,又節(jié)省了大量的漢卡內(nèi)存.

    有關(guān)"51漢卡"的幾點(diǎn)說(shuō)明如下:

    ①凡漢字庫(kù)中簡(jiǎn)、繁體字都有的用簡(jiǎn)體.如"後"以"后"代,"馀"以"余"代等;

    ②《新華字典》未收入字,多未收入,如"酏"、"鼽"等字,但"婧"、"弳"等字仍收入;

    ③對(duì)于多體字,一般以常用字代,如"摺"以"折"代,"鏇"以"旋,代等,但"吒"不以"咤"代,"讎"不以"仇"代等;

    ④對(duì)通常已由其它字取代的字,都以這些字代替,如"崠"以"東"代,"肛''以"船"代等;

    ⑤二級(jí)漢字中,不單獨(dú)構(gòu)成漢字的偏旁未收入;

    ⑥依據(jù)名篇名著,生活用語(yǔ)等,增補(bǔ)漢字86個(gè);

    ⑦收編大、小寫(xiě)英文字母、阿拉伯?dāng)?shù)字、標(biāo)點(diǎn)符號(hào)等各種常用字符160個(gè).

    5."51單片機(jī)漢卡"應(yīng)用舉例

    利用"51單片機(jī)漢卡",將使51系列單片機(jī)的漢字顯示輕而易舉,并可大為降低成本、體積和設(shè)計(jì)開(kāi)發(fā)的難度,為單片機(jī)在生產(chǎn)控制、信息通信、文化教育和日常生活等領(lǐng)域,特別是計(jì)算機(jī)終端和手持產(chǎn)品的開(kāi)發(fā)提供極大的便利和支持.?

    我們現(xiàn)已初步開(kāi)發(fā)成"51漢卡"的"區(qū)位碼輸入法"和"拼音輸入法,檢字程序,并利用"51漢卡"成功地開(kāi)發(fā)了帶有廉價(jià)單片機(jī)控制器的LED漢字顯示屏.這不僅大幅度降低了成本費(fèi)用.而且用戶(hù)可以通過(guò)單片機(jī)控制器,隨心所欲地改變顯示內(nèi)容.

    51硬件設(shè)計(jì)

    CPU--87C51、12MHz晶振.

 

    程序存儲(chǔ)器一1片EPROM?27C512.

    數(shù)據(jù)存儲(chǔ)器一1片EPROM?27C512;1片EEPROM28C64A;1片6116.

    控制器顯示屏一LCD?HY一19264B(深圳秋田視佳實(shí)業(yè)有限公司).

    LED屏選240×16點(diǎn)陣.

    本系統(tǒng)用標(biāo)準(zhǔn)小鍵盤(pán)檢字,一次可予選4000字;控制器LCD滿(mǎn)屏顯示l3×14點(diǎn)陣漢字56個(gè);LED屏滿(mǎn)屏顯示漢字19個(gè).

    地址分配及用途如表l所列.

    5.2程序設(shè)計(jì)框圖

    程序設(shè)計(jì)流程如圖1所示.本系統(tǒng)采用12MHz晶振,若LCD取滿(mǎn)屏56字,換屏?xí)r有約0.1s的延時(shí),這對(duì)人的實(shí)際視覺(jué)并無(wú)大影響.

標(biāo)準(zhǔn)點(diǎn)陣漢字字庫(kù)芯片

回到頂部

    1 概述

    GT23L24M1W是一款內(nèi)含24X24點(diǎn)陣的漢字庫(kù)芯片,支持GB18030國(guó)標(biāo)漢字(含有國(guó)家信標(biāo)委合法授

    權(quán))及ASCII字符.排列格式為橫置橫排.用戶(hù)通過(guò)字符內(nèi)碼,利用本手冊(cè)提供的方法計(jì)算出該字符點(diǎn)陣

    在芯片中的地址,可從該地址連續(xù)讀出字符點(diǎn)陣信息.

    1.1 芯片特點(diǎn)

    ●  數(shù)據(jù)總線: SPI 串行總線接口

    PLII 精簡(jiǎn)地址并行總線接口

    ●  點(diǎn)陣排列方式:字節(jié)橫置橫排

    訪問(wèn)速度:SPI 時(shí)鐘頻率:20MHz(max.)

    PLII 訪問(wèn)速度:130ns(max.) @3.3V

    ●  工作電壓:2.7V~3.6V

    ●  電流:工作電流:12mA

    待機(jī)電流:10uA

    ●  封裝:SO20W

    ●  尺寸(SO20W):12.80mmX10.30mm

    ●  工作溫度:-20℃~85℃(SPI 模式下);-10℃~85℃(PLII 模式下)

    1.2 字庫(kù)內(nèi)容

    字型樣張

    2 引腳描述與接口連接

    2.1 引腳名稱(chēng)

    2.2 SPI 接口引腳描述

    串行數(shù)據(jù)輸出(SO):該信號(hào)用來(lái)把數(shù)據(jù)從芯片串行輸出,數(shù)據(jù)在時(shí)鐘的下降沿移出.

    串行數(shù)據(jù)輸入(SI):該信號(hào)用來(lái)把數(shù)據(jù)從串行輸入芯片,數(shù)據(jù)在時(shí)鐘的上升沿移入.

    串行時(shí)鐘輸入(SCLK):數(shù)據(jù)在時(shí)鐘上升沿移入,在下降沿移出.

    片選輸入(CS#):所有串行數(shù)據(jù)傳輸開(kāi)始于CE#下降沿,CE#在傳輸期間必須保持為低電平,在兩條

    指令之間保持為高電平.

    總線掛起輸入(HOLD#):

    2.3 SPI 接口與主機(jī)接口電路示意圖

    SPI 與主機(jī)接口電路連接可以參考下圖(#HOLD管腳建議接 2K 電阻 3.3V 拉高).

    若是采用系統(tǒng)電壓為 5V的,則需要進(jìn)行電平轉(zhuǎn)換匹配連接 GT23 芯片,可以參考下圖(#HOLD 管腳建議接 2K 電阻 3.3V 拉高).

    2.4 PLII 接口引腳描述

    2.5 PLII 接口與主機(jī)接口電路示意圖

    SPI/PLII_SEL(管腳內(nèi)部有 100K 上拉電阻)接地,字庫(kù)芯片選擇 PLII 接口模式,與主機(jī)接口電路連接可以參考下圖.

    2.6 PLII 總線接口尋址說(shuō)明

    在 PLII 總線模式下,芯片內(nèi)部有 3個(gè)地址寄存器,主機(jī)需要把要讀取數(shù)據(jù)的地址寫(xiě)入這 3個(gè)地址寄存器,然后再?gòu)臄?shù)據(jù)寄存器中讀出數(shù)據(jù).主機(jī)每讀一次數(shù)據(jù)寄存器,芯片內(nèi)部的地址寄存器會(huì)自動(dòng)增一,從而使主機(jī)只寫(xiě)一次首地址,就可以連續(xù)讀取數(shù)據(jù).

    3 字庫(kù)調(diào)用方法

    3.1 漢字點(diǎn)陣排列格式

    每個(gè)漢字在芯片中是以漢字點(diǎn)陣字模的形式存儲(chǔ)的,每個(gè)點(diǎn)用一個(gè)二進(jìn)制位表示,存 1的點(diǎn),當(dāng)顯示

    時(shí)可以在屏幕上顯示亮點(diǎn),存 0的點(diǎn),則在屏幕上不顯示.點(diǎn)陣排列格式為橫置橫排:即一個(gè)字節(jié)的高位

    表示左面的點(diǎn),低位表示右面的點(diǎn)(如果用戶(hù)按 word mode讀取點(diǎn)陣數(shù)據(jù),請(qǐng)注意高低字節(jié)的順序),排

    滿(mǎn)一行的點(diǎn)后再排下一行.這樣把點(diǎn)陣信息用來(lái)直接在顯示器上按上述規(guī)則顯示,則將出現(xiàn)對(duì)應(yīng)的漢字.

    3.1.1  24X24點(diǎn)漢字排列格式

    24X24 點(diǎn)漢字的信息需要 72個(gè)字節(jié)(BYTE 0 – BYTE 71)來(lái)表示.該 24X24 點(diǎn)漢字的點(diǎn)陣數(shù)據(jù)是

    橫置橫排的,其具體排列結(jié)構(gòu)如下圖:

    命名規(guī)則:

    最大字符集及字?jǐn)?shù)

    S:GB2312 6,763漢字

    M:GB18030 27,484漢字

    T:GB12345  6,866漢字

    BIG5  5,401 / 13,060漢字

    U:Unicode V3.0  27,484漢字

posted on 2011-03-18 15:01 wrh 閱讀(5138) 評(píng)論(0)  編輯 收藏 引用


只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


導(dǎo)航

<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

統(tǒng)計(jì)

  • 隨筆 - 268
  • 文章 - 11
  • 評(píng)論 - 52
  • 引用 - 0

常用鏈接

留言簿(19)

隨筆檔案

文章檔案

收藏夾

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              亚洲九九精品| 精品成人a区在线观看| 亚洲欧美在线网| 亚洲午夜精品国产| 亚洲一区三区在线观看| 亚洲欧美国产高清| 亚洲欧美日韩精品久久久| 欧美一级在线播放| 蜜臀av一级做a爰片久久| 欧美日韩精品一区二区三区| 国产精品久久久久永久免费观看| 国产精品日韩欧美一区| 韩国精品一区二区三区| 亚洲毛片一区| 久久精品国亚洲| 欧美激情影音先锋| 亚洲性av在线| 女人天堂亚洲aⅴ在线观看| 欧美视频日韩视频| 激情久久久久久久久久久久久久久久| 91久久精品日日躁夜夜躁国产| 中国成人黄色视屏| 久久人人爽国产| 亚洲午夜久久久久久久久电影院| 欧美一区亚洲二区| 欧美日韩亚洲一区三区| 黄色亚洲在线| 亚洲欧美国产77777| 亚洲第一在线视频| 亚洲一区二区少妇| 欧美成人在线免费视频| 国产一区二区日韩精品欧美精品| 亚洲精选一区| 免费在线欧美黄色| 性欧美大战久久久久久久免费观看| 欧美精品一卡| 亚洲电影一级黄| 久久综合激情| 亚洲一区二区三区在线| 欧美日韩国产黄| 亚洲黄色免费| 欧美电影专区| 麻豆国产va免费精品高清在线| 国产欧美一二三区| 亚洲在线一区二区三区| 亚洲精品专区| 欧美人与性禽动交情品 | 亚洲午夜视频在线观看| 久久久www| 国内精品久久久久影院 日本资源 国内精品久久久久伊人av | 久久久中精品2020中文| 日韩视频欧美视频| 免费亚洲一区二区| 欧美在线视频一区二区| 国产精品国产自产拍高清av| 日韩亚洲欧美中文三级| 亚洲电影在线播放| 欧美成年人视频网站| 在线精品观看| 麻豆精品精华液| 久久青草欧美一区二区三区| 国语自产精品视频在线看8查询8 | 久久资源在线| 欧美一区二区三区另类| 国产日韩欧美综合一区| 久久se精品一区二区| 小黄鸭精品aⅴ导航网站入口| 国产欧美精品一区二区三区介绍| 欧美在线观看天堂一区二区三区| 亚洲午夜在线| 国产日韩欧美电影在线观看| 久久丁香综合五月国产三级网站| 午夜精品久久久久久99热软件 | 亚洲图片激情小说| 亚洲午夜精品久久| 国产欧美三级| 欧美成人综合一区| 欧美另类在线播放| 欧美一区1区三区3区公司| 欧美一区在线视频| 亚洲电影在线播放| 亚洲精品影院在线观看| 国产精品毛片a∨一区二区三区| 欧美一区二区三区视频免费播放| 欧美一区二区三区的| 亚洲三级观看| 亚洲在线视频免费观看| 极品中文字幕一区| 亚洲精品系列| 国产综合色产| 日韩性生活视频| 狠狠入ady亚洲精品| 亚洲激情校园春色| 国产精品一区二区三区久久| 免费成人高清| 国产精品盗摄久久久| 久久女同精品一区二区| 欧美久久九九| 久久久久国产免费免费| 欧美日韩国产不卡| 美女主播一区| 国产精品综合网站| 亚洲精品国精品久久99热| 国产视频一区在线观看| 亚洲精品视频免费| 一区二区三区在线视频播放| 亚洲天堂网在线观看| 最新日韩av| 久久久久高清| 欧美视频在线观看免费网址| 一区二区在线观看视频在线观看 | 亚洲高清在线| 国产区日韩欧美| 一区二区三区四区国产| 亚洲国产一区二区三区在线播 | 久久精品官网| 欧美日韩亚洲一区二区三区在线观看| 久久午夜影视| 国产亚洲成人一区| 亚洲一区二区av电影| 在线午夜精品| 欧美女同视频| 亚洲激情一区二区| 亚洲国产清纯| 久久综合久久综合九色| 久久嫩草精品久久久久| 国产日韩综合一区二区性色av| 亚洲最新色图| 国产精品99久久久久久久女警| 欧美激情第三页| 亚洲国产高清视频| 最新成人在线| 欧美成人在线免费观看| 亚洲第一视频| 日韩一本二本av| 欧美日本亚洲视频| 亚洲精品综合久久中文字幕| 日韩一区二区久久| 欧美日韩国产精品自在自线| 亚洲精选一区| 性刺激综合网| 国产在线拍偷自揄拍精品| 久久精品国产99| 欧美黄色免费网站| 一区二区欧美精品| 国产精品日韩二区| 久久国产精品99国产精| 欧美肥婆在线| 在线视频精品| 国产欧美综合一区二区三区| 午夜精品久久久久久99热| 久久午夜电影| 日韩亚洲在线观看| 国产精品视频1区| 久久国产精品网站| 欧美激情精品久久久久久| 一区二区三区www| 国产日本欧美一区二区三区在线 | 狠色狠色综合久久| 欧美成人激情在线| 亚洲视频1区2区| 久久免费视频在线观看| 亚洲精品乱码久久久久久日本蜜臀 | 欧美日韩一区二区三区视频 | 亚洲天堂网在线观看| 久久国产手机看片| 在线播放豆国产99亚洲| 欧美区亚洲区| 亚洲欧美一区二区三区在线| 久久一区二区三区四区五区| 亚洲国产一区二区三区高清| 欧美性理论片在线观看片免费| 欧美一级精品大片| 亚洲国产视频一区| 欧美一级一区| 亚洲毛片在线看| 国产视频一区二区在线观看| 欧美精品日韩三级| 久久成人人人人精品欧| 日韩亚洲欧美在线观看| 老司机aⅴ在线精品导航| 在线视频你懂得一区| 在线观看精品一区| 国产乱理伦片在线观看夜一区| 欧美.www| 久久精品视频va| 国产精品99久久不卡二区| 欧美激情在线观看| 久热精品在线视频| 香蕉久久精品日日躁夜夜躁| 亚洲精品欧美日韩| 曰韩精品一区二区| 国产专区精品视频| 国产人成精品一区二区三| 欧美日韩三区| 欧美精品成人91久久久久久久| 久久精品国产久精国产思思| 日韩一本二本av| 亚洲国产精品久久久| 欧美成人精品激情在线观看|