日韩欧美国产极速不卡一区,国产手机视频在线观看尤物,国产亚洲欧美日韩蜜芽一区,亚洲精品国产免费,亚洲二区三区无码中文,A大片亚洲AV无码一区二区三区,日韩国语国产无码123

您好,歡迎來到維庫電子市場網(wǎng) 登錄 | 免費注冊

點陣字庫
閱讀�40576時間�2011-02-12 14:02:46

  點陣字庫是把每一個漢字都分成16×16�24×24個點,然后用每個點的虛實來表示漢字的輪廓,常用來作為顯示字庫使�,這類點陣字庫漢字的缺點是不能放大,一旦放大后就會�(fā)�(xiàn)文字邊緣的鋸��

顯示原理

  所有的漢字或者英文都是下面的原理�

  由左至右,每8個點占用一個字節(jié),不�8個字節(jié)的占用一個字節(jié),而且從位向位排列�

  生成的字庫說明:(以12×12例子�

生成的字庫說明

  一個漢字占用字節(jié)�(shù)�12÷8=1····4也就是占用了2×12=24個字節(jié)�

  編碼排序A0A0→A0FE A1A0→A2FE依次排列�

  �12×12字庫的“我”為例:“我”的編碼為CED2,所以在漢字排在CEH-AOH=2EH區(qū)的D2H-A0H=32H�。所以在12×12字庫的起始位置就是[{FE-A0}*2EH+32H]*24=104976開始�24個字節(jié)就是我的點陣��

  其他的類推即��

  英文點陣也是如此推理�

與字符字�

  在dos終端模式下是不可以顯示中文漢字的,只能顯示英文�

  漢字與英文的區(qū)別是�

  1. 漢字字庫�,任何字符均�2個字節(jié)編碼,即區(qū)碼和位碼,在英文字庫�,所有字符均用單字節(jié)編碼�

  2. 16點陣漢字字庫(16*16)�32個字節(jié)存儲一個字符的字模�16點陣英文字庫(8*16)�16個字節(jié)存儲單個字符的字模�

  在DOS終端模式下用的是16點陣英文字庫,如果要讓DOS終端中顯示中�,可以改寫終端模式下�16點陣英文字庫,使其顯示的不是原有的英文字符,而是漢字字符,當然也可以加入自造點陣圖形圖�。原理為�

  我們輸入AB,正常顯示的是AB,但如果改變AB的字�,用漢字的字模代替,這樣輸入AB字符,并不顯示AB,而是顯示一個漢�。將一個漢字從中間劈為兩半,左面部分頂替A的字�,右面部分頂替B的字��

  dos所用字�,文件頭�(jié)�(gòu)很簡�,如默認�8*16英文字庫,文件頭長度�4,跳過這四個字節(jié)就是字模�(shù)�(jù);也有沒有文件頭�,從個字節(jié)開始就是字模�(shù)�(jù)�

�(jié)�(gòu)

  1、點陣字庫存�

  在漢字的點陣字庫�,每個字節(jié)的每個位都代表一個漢字的一個點,每個漢字都是由一個矩形的點陣組成�0代表沒有�1代表有點,將0�1分別用不同顏色畫�,就形成了一個漢�,常用的點陣矩陣�12*12, 14*14, 16*16三種字庫�

  字庫根據(jù)字節(jié)所表示點的不同有分為橫向矩陣和縱向矩陣,目前多�(shù)的字庫都是橫向矩陣的存儲方式(用得最多的�(yīng)該是早期UCDOS字庫),縱向矩陣一般是因為有某些液晶是采用縱向掃描顯示法,為了提高顯示速度,于是便把字庫矩陣做成縱�,省得在顯示時還要做矩陣�(zhuǎn)�。我們接下去所描述的都是指橫向矩陣字庫�

  2�16*16點陣字庫

  對于16*16的矩陣來�,它所需要的位數(shù)共是16*16�256個位,每個字節(jié)�8�,因�,每個漢字都需要用256/8=32個字節(jié)來表��

  即每兩個字節(jié)代表一行的16個點,共需�16�,顯示漢字時,只需一次性讀�32個字節(jié),并將每兩個字節(jié)為一行打印出�,即可形成一個漢字�

  點陣�(jié)�(gòu)如下圖所示:

  字節(jié) 第二字節(jié)

  0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7

  0

  1

  2

  3

  4

  5

  6

  7

  8

  9

  10

  11

  12

  13

  14

  15

  3�14*14�12*12點陣字庫

  對于14*14�12*12的字�,理論上計算,它們所需要的點陣分別�(14*14/8)=25, (12*12/8)=18個字節(jié),但�,如果按這種方式來存�,那么取點陣和顯示時,由于它們每一行都不是8的整位數(shù),因�,就會涉到點陣的計算處理問題,會增加程序的復(fù)雜度,降低程序的效率�

  為了解決這個問題,有些點陣字庫會將14*14�12*12的字庫按16*14�16*12來存�,即,每行還是按兩個字節(jié)來存�,但�14*14的字�,每兩個字節(jié)的兩位是沒有使用�12*12的字節(jié),每兩字節(jié)�4位是沒有使用,這個根�(jù)不同的字庫會有不同的處理方式,所以在使用字庫時要注意這個問題,特別�14*14的字��

漢字點陣獲取

  1、利用區(qū)位碼獲取漢字

  漢字點陣字庫是根�(jù)區(qū)位碼的順序進行存儲�,因此,我們可以根�(jù)區(qū)位來獲取一個字庫的點陣,它的計算公式如下:

  點陣起始位置 = ((區(qū)�- 1)*94 + (位碼 � 1)) * 漢字點陣字節(jié)�(shù)

  獲取點陣起始位置�,我們就可以從這個位置開�,讀取出一個漢字的點陣�

  2、利用漢字機�(nèi)碼獲取漢�

  前面我們己�(jīng)講過,漢字的區(qū)位碼和機�(nèi)碼的�(guān)系如下:

  機內(nèi)碼高位字節(jié) = 區(qū)� + 20H + 80H(或區(qū)� + A0H)

  機內(nèi)碼低位字節(jié) = 位碼 + 20H + 80H(或位� + AOH)

  反過來說,我們也可以根據(jù)機內(nèi)碼來獲得區(qū)位碼�

  區(qū)� = 機內(nèi)碼高位字節(jié) - A0H

  位碼 = 機內(nèi)碼低位字節(jié) - AOH

  將這個公式與獲取漢字點陣的公式進行合并計就可以得到漢字的點陣位置�

在DOS程序中使用方�

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

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

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

  | |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| | |

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

  可以看出這是一�"�"字的點陣,當然文本的方式效果不是很�.根據(jù)上面的原�,我們可以寫出這個點陣的點陣�(shù) �(jù):0x40,0x08,0x37,0xfc,0x10,0x08,�, 當然寫這個確實很麻煩所以我不再繼續(xù)下去.我這樣�,也只是為了向你說�,在點陣字庫中,每一個點陣的�(shù)�(jù)就是按照這種方式存放�.

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

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

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

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

  {

  int     i;    /* 控制� */

  int     j;    /* 控制一行中�8個點 */

  int     k;    /* 一行中的第幾�"8個點"� */

  int     nc;   /* 到點陣數(shù)�(jù)的第幾個字節(jié)� */

  int     cols; /* 控制� */

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

  w = (w + 7) / 8 * 8; /* 重新計算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++;

  }

  }

  }

  代碼很簡�,不用怎么講解就能看懂,代碼可能不是化的,但是�(yīng)該是最易讀懂的.其中� putpixel 函數(shù),使用的是TC提供� Graphics 中的畫點函數(shù).使用這個函�(shù)就可以完成點陣任意大小的點陣字模的輸�.

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

  個擴展ASCII� = 128+32 + 漢字區(qū)�

  第二個擴展ASCII� = 128+32 + 漢字位碼

  如果用char hz[2]來表示一個漢�,那么我可以計算出這個漢字的區(qū)位碼�:

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

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

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

  漢字點陣�(shù)�(jù)在字庫文件中的偏� = ((區(qū)�-1) * 94 + 位碼) * 一個點陣字模占用的字節(jié)�(shù)

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

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

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

  {

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

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

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

  /* 計算偏移 */

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

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

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

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

  }

  以上介紹完了中文點陣字庫的原�,當然還有英文點陣字庫�.英文點陣字庫中單個點陣字模數(shù)�(jù)的存放方式與中文是一模一樣的,也就是對我們所寫的 _draw_model 函數(shù)同樣可以使用到英文字庫中.不同的是對點陣字庫的尋址�.英文使用的就� ASCII �,其碼值是0�127,尋址公式�:

  英文點陣�(shù)�(jù)在英文點陣字庫中的偏� = 英文的ASCII� * 一個英文字模占用的字節(jié)�(shù)可以看到,區(qū)分中英文的關(guān)鍵就�,一個字符是 ASCII 碼還是擴� ASCII �,如果� ASCII �,其范圍是0�127,這樣是使用的英文字庫,如果是擴� ASCII �,則與其后的另一個擴� ASCII 碼組成漢字內(nèi)�,使用中文字庫進行顯示.只要正確區(qū)� ASCII 碼的類型并進行分別的處�,也就能實�(xiàn)中英文字符串的混合輸出了�

和矢量字庫的差別

  我們都只知�,各種字符在電腦屏幕上都是以一些點來表示的,因此也叫點陣。最早的字庫就是直接把這些點存儲起�,就是點陣字庫。常見的漢字點陣字庫� 16x16, 24x24 �。點陣字庫也有很多種,主要區(qū)別在于其中存儲編碼的方式不同。點陣字庫的缺點就是它是固定分辨率的,也就是每種字庫都有固定的大小尺寸,在原始尺寸下使用,效果很好,但如果將其放大或縮小使用,效果就很糟糕�,就會出現(xiàn)我們通常說的鋸齒�(xiàn)�。因為需要的字體大小組合有無�(shù)�,我們也不可能為每種大小都定義一個點陣字�。于是就出現(xiàn)了矢量字庫�

  矢量字庫

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

  在點陣字庫中,每個字符由一個位圖表�,并把它用一個稱為字符掩膜的矩陣來表�,其中的每個元素都是一位二進制�(shù),如果該位�1表示字符的筆畫經(jīng)過此�,該像素置為字符顏�;如果該位�0,表示字符的筆畫不�(jīng)過此�,該像素置為背景顏�。點陣字符的顯示分為兩步:首先從字庫中將它的位圖檢索出�,然后將檢索到的位圖寫到幀緩沖器中�

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

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

  矢量字符的顯示也分為兩步。首先從字庫中將它的字符信息。然后取出端點坐�,對其進行適當?shù)膸缀巫儞Q,再根�(jù)各端點的標志顯示出字��

  輪廓字形法是當今國際上的一種字符表示方�,其壓縮比�,且能保證字符�(zhì)�。輪廓字形法采用直線、B樣條/Bezier曲線的集合來描述一個字符的輪廓�。輪廓線�(gòu)成一個或若干個封閉的平面區(qū)�。輪廓線定義加上一些指示橫�、豎寬、基�、基線等等控制信息就�(gòu)成了字符的壓縮數(shù)�(jù)�

如何使用Windows的系�(tǒng)字庫生成

  程序�(xiàn)在只能預(yù)覽一個漢字的不同字體的點陣表�.

  界面很簡�:   一個輸出點陣大小的選擇列表(8x8,16x16,24x24�),一個系�(tǒng)中已有的字體名稱列表,一個預(yù)覽按�,一塊畫圖顯示區(qū)�.

  得到字體列表的方�:(作者稱這一段是用來取回系統(tǒ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;

  }

  //說明:CFontPeekerDlg   是我的dialog的類�,   m_combo_sfont是列表名稱下拉combobox�(guān)�(lián)的control變量

  //�(diào)用的地方     (******問題1:下面那�&lf怎么得到呢…�)

  {

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

  m_combo_sfont.SetCurSel(0);

  }

  字體�(yù)�:

  如果點陣大小選擇16,顯示的時候就畫出16x16個方�.自定義一個類CMyStatic繼承自CStatic,用來畫圖.在CMyStatic的OnPaint()函數(shù)中計算并顯示.

  取得字體:

  常用的方�:用CreateFont�(chuàng)建字�,把字TextOut再用GetPixel()取點存入�(shù)�.   缺點:必須把字TextOut出來,能在屏幕上看�,不爽.

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

  函數(shù)原型如下:

  DWORD   GetGlyphOutline(

  HDC   hdc,                     //畫圖�(shè)備句�

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

  UINT   uFormat,             //返回�(shù)�(jù)的格�(字的外形輪廓還是字的位圖)

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

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

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

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

  );

  說明:

  uChar字符需要判斷是否是漢字還是英文字符.中文�2個字節(jié)長度.

  lpgm是輸出函�(shù),�(diào)用GetGlyphOutline()是無須給lpgm   賦�.

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

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

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

  ……前面部分省略…�

  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)對齊

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

  }

  else

  {

  if(m_pFont!=NULL)

  delete   m_pFont;

  return;

  }

  編程中遇到問�:

  一開始,GetGlyphOutline總是返回-1,getLastError顯示�"無法完成的功�",后來�(fā)�(xiàn)是因為調(diào)用之前沒有給hdc�(shè)置Font.

  后來能取得pBuf信息�,又開始郁�,因為不太明白bitmap的結(jié)果是按什么排列的.后來跟蹤漢字"一"來調(diào)�(這個字簡單),注意到了glyph.gmBlackBoxX   其實就是輸出位圖的寬�,glyph.gmBlackBoxY就是高度.如果gmBlackBoxX=15,glyph.gmBlackBoxY=2,表示輸出的pBuf中有這些信息:位圖�2行信�,每一行使�15   bit來存儲信�.

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

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

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

  第二行根�(jù)4字節(jié)對齊的規(guī)�,�0xff開始         1111   1111   1111   110

  看出"一"字了�?呵呵

  直到他的存儲之后就可以動手解析輸出的信息�.

  我定義了一個宏#define   BIT(n)     (1<<(n))     用來比較每一個位信息時使�

  后來又遇到了一個問�,就是小頭和大頭的問題�.在我的機器上是little   endian的形�,如果我用

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

  //j   from   0   to   15

  if(   *lptr   &   BIT(j)   )

  {

  //這時候如果想用j來表示寫1的位�(shù),就錯�

  }

  因為從字節(jié)�(shù)組中�(zhuǎn)化成unsigned   long型的時�,�(shù)值已�(jīng)�(jīng)過轉(zhuǎn)化了,像上例中,實際上是0x0800   在同BIT(j)比較.

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

標準芯片

  標準點陣字庫芯片的特點:

  1.�(nèi)涵全國信標委授權(quán)的標準點陣字型數(shù)�(jù)�

  2.支持國標字符集GB2312(6,763漢字),GB18030(27,484漢字)�

  3.支持多種點陣字型,包括11×12�,15×16�,24×24�,32×32��

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

  5.價格相當于空白FLASH價格�

維庫電子�,電子知�,一查百��

已收錄詞�160458