资源描述:
《点阵字库和矢量字库》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、点阵字库的生产原理(转) 2011-05-1715:31:45
2、 分类:其他技术
3、 标签:
4、字号大中小 订阅点阵字库的生产原理所有的汉字或者英文都是下面的原理,由左至右,每8个点占用一个字节,最后不足8个字节的占用一个字节,而且从最高位向最低位排列。生成的字库说明:(以12×12例子)一个汉字占用字节数:12÷8=1····4也就是占用了2×12=24个字节。编码排序A0A0→A0FEA1A0→A2FE依次排列。以12×12字库的“我”为例:“我”的编码为CED2,所以在汉字排在CEH-AOH=2EH区的D2H-A0H=32H个。所以在12×12字库的起始位置就是[{
5、FE-A0}*2EH+32H]*24=104976开始的24个字节就是我的点阵模。其他的类推即可。英文点阵也是如此推理。在DOS程序中使用点阵字库的方法 首先需要理解的是点阵字库是一个数据文件,在这个数据文件里面保存了所有文字的点阵数据.至于什么是点阵,我想我不讲大家都知道的,使用过"文曲星"之类的电子辞典吧,那个的液晶显示器上面显示的汉子就能够明显的看出"点阵"的痕迹.在PC机上也是如此,文字也是由点阵来组成了,不同的是,PC机显示器的显示分辨率更高,高到了我们肉眼无法区分的地步,因此"点阵"的痕迹也就不那么明显了. 点阵、矩阵、位图这三个概念在本质上是有联系的,
6、从某种程度上来讲,这三个就是同义词.点阵从本质上讲就是单色位图,他使用一个比特来表示一个点,如果这个比特为0,表示某个位置没有点,如果为1表示某个位置有点.矩阵和位图有着密不可分的联系,矩阵其实是位图的数学抽象,是一个二维的阵列.位图就是这种二维的阵列,这个阵列中的(x,y)位置上的数据代表的就是对原始图形进行采样量化后的颜色值.但是,另一方面,我们要面对的问题是,计算机中数据的存放都是一维的,线性的.因此,我们需要将二维的数据线性化到一维里面去.通常的做法就是将二维数据按行顺序的存放,这样就线性化到了一维. 那么点阵字的数据存放细节到底是怎么样的呢.其实也十分的简单,
7、举个例子最能说明问题.比如说16*16的点阵,也就是说每一行有16个点,由于一个点使用一个比特来表示,如果这个比特的值为1,则表示这个位置有点,如果这个比特的值为0,则表示这个位置没有点,那么一行也就需要16个比特,而8个比特就是一个字节,也就是说,这个点阵中,一行的数据需要两个字节来存放.第一行的前八个点的数据存放在点阵数据的第一个字节里面,第一行的后面八个点的数据存放在点阵数据的第二个字节里面,第二行的前八个点的数据存放在点阵数据的第三个字节里面,…,然后后面的就以此类推了.这样我们可以计算出存放一个点阵总共需要32个字节.看看下面这个图形化的例子:
8、
9、1
10、
11、
12、
13、
14、
15、
16、
17、
18、
19、
20、
21、1
22、
23、
24、
25、
26、
27、
28、1
29、1
30、
31、1
32、1
33、1
34、1
35、1
36、1
37、1
38、1
39、1
40、
41、
42、
43、
44、
45、
46、1
47、
48、
49、
50、
51、
52、
53、
54、
55、1
56、
57、
58、
59、
60、1
61、
62、
63、
64、
65、
66、1
67、
68、
69、
70、
71、
72、1
73、
74、
75、
76、
77、
78、1
79、1
80、
81、
82、
83、1
84、
85、
86、
87、
88、
89、1
90、
91、
92、
93、
94、
95、
96、1
97、
98、
99、
100、1
101、
102、
103、
104、
105、1
106、
107、
108、
109、
110、
111、
112、
113、
114、
115、1
116、
117、
118、1
119、
120、
121、
122、1
123、
124、
125、
126、
127、
128、
129、
130、
131、1
132、
133、
134、
135、1
136、
137、
138、1
139、
140、
141、
142、
143、
144、
145、
146、
147、1
148、
149、
150、
151、
152、
153、1
154、
155、1
156、
157、
158、
159、
160、
161、
162、1
163、1
164、1
165、
166、
167、
168、
169、
170、
171、1
172、
173、
174、
175、
176、
177、
178、
179、
180、
181、1
182、
183、
184、
185、
186、
187、1
188、
189、1
190、
191、
192、
193、
194、
195、
196、
197、
198、1
199、
200、
201、
202、
203、1
204、
205、
206、
207、1
208、
209、
210、
211、
212、
213、
214、
215、1
216、
217、
218、
219、1
220、
221、
222、
223、
224、
225、
226、1
227、
228、
229、
230、
231、
232、
233、1
234、
235、
236、1
237、
238、
239、
240、
241、
242、
243、1
244、1
245、1
246、
247、
248、
249、
250、
251、
252、1
253、
254、
255、
256、
257、
258、
259、
260、
261、1
262、
263、
264、
265、
266、
267、
268、
269、
270、
271、
272、
273、
274、
275、
276、
277、
278、
279、
280、
281、 可以看出这是一个"汉"字的点阵,当然文本的方式效果不是很好.根据上面的原则,我们可以写出这个点阵的点阵数据:0x40,0x08,0x37,0xfc,0x10,0x08,…,当然写这个确实很麻烦所以我不再继续下去.我这样做,也只是为了向你说明,在点阵字库中,每一个点阵的数据就是按照这种方式存放的. 当然也存在着不规则的点阵,这里说的不规则,指的是点阵的宽度不是8的倍数,比如12*12的点阵,那么这样的点阵数据又是如何存放
282、的呢?其实也很简单,每一行的前面8个点存放在一个字节里面,每一行的剩下的4点就使用一个字节来存放,也就是说剩下的4个点将占用一个字节的高4位,而这个字节的低4位没有使用,全部都默认的为零.这样做当然显得有点浪费,不过却能够便于我们进行存放和寻址.对于其他不规则的点阵,也是按照这个原则进行处理的.这样我们可以得出一个m*n的点阵所占用的字节数为(m+7)/8*n. 在明白了以上所讲的以后,我们可以写出一个显示一个任意大小的点阵字模的函数,这个函数的功能是输出一个宽度为w,高度为h的字模到屏幕的(x,y)坐标出,文