点阵字库

点阵字库
点阵字库

点阵字库

一. 什么是点阵字库?

我们先了解什么是点阵,简单的说,点阵就是一幅位图。一般默认都指单色位图,即它是用一个bit表示一个点(像素);其实还有灰阶点阵字库(抗锯齿)和彩色点阵字库(绚丽,但不实用),即多个bit表示一个点(像素)。

点阵字库是指多个(>=1)字符的点阵信息的集合,亦可理解为位图组合。

二. 编码格式

目前主要分内码字库和Unicode字库。

(之前项目中应用的是GBK的内码字库,如果要显示日文则无能为力了,目前引入了UNICODE的点阵字库,解决了多语言显示的问题。)

三. 存储格式

目前主要分为“Not Fixed” 和“Height Fixed”。

Not Fixed:自适应宽高。

Height Fixed:等高非等宽。

Not Fixed Height Fixed

四. 输出格式

输出格式是将字符点阵信息以不同的方式存放,反应给用户。

(目前修改使用的是bin输出格式,当然这是指个名字)五.增加日语等多国语言显示工作流程

六.字库生成工具及示例

步骤说明:

如上图示,分5 步。

1. 选择矢量字库文件(*.ttf)或bdf 格式文件(.bdf).

A.先将c:\windows\fonts 目录下的字体文件拷贝(ctrl+c)出来,然后本软件即可选择。

B.建议去网上找一个ArialUni.ttf 字库

下载地址:https://www.360docs.net/doc/d45657356.html,/f/4942778.html

2. 选择编码格式,转换模式,字体大小,DPI.

3. 选择需要支持的字符集。

4. 设置输出文件类型,及输出路径。

5. 点击build 按钮,转换生成字库。

补充说明:

A.若您选择的是MBCS 编码格式,则会根据您选择的字符集数产生相应份数的上述文件。

B.若您选择的是UNICODE 编码格式,不论您选多少个字符集,都只会输出一份上述文件。

C.若生成字库失败,则有可能您选择的字体文件(*.TTF)原本就不包含该字符集的字符信息。比如:

宋体中不存在韩文字符,即用宋体生成的字库无法支持韩文显示。

参考办法:用系统自带的字符映射表进行参照,其字符映射表中可选择不同的字体、字符集(点击“高级查看”)。

开启字符映射表的方法:

1)以命令方式运行开启,点击开始菜单-->选择运行-->键入"charmap"回车即可。2)以菜单方式开启,点击开始菜单-->所有程序-->附件-->系统工具--->字符映射表

预览效果:

七.字库文件结构

字库文件指的是通过tool 转换出来的bin 文件(低字节序)。通常由以下几部分组成。

1. 文件头

指的是文件的前16 个字节(BYTE),描述信息如下结构:

typedef struct tagFontLibHeader

{

BYTE magic[4]; //'U'('S', 'M'), 'F', 'L', X---Unicode(Simple or MBCS), X:

Version

DWORD dwFileSize; /* File total size */

BYTE nSection; /* total sections */

BYTE YSize; /* height of font */

WORD wCpFlag; /* codepageflag */

WORD nTotalChars;

char reserved[2];

} FL_Header, *PFL_Header;

2. 段信息

只针对Unicode 编码有效,占字节数:nSection*sizeof(FL_SECTION_INF)。

结构如下:

struct tagFlSectionInfo

{

WORD First; /* first character */

WORD Last; /* last character */

DWORD OffAddr; /* 指向的是当前SECTION包含的

UFL_CHAR_INFO第一个字符信息的起始地址*/

} FL_SECTION_INF, *PFL_SECTION_INF;

3.检索表

只针对Unicode 字库和非等宽的Mbcs 有效。不包含Mbcs 的CJK (简中、繁中、日文、韩文),因为这些都将等宽处理。

typedef struct tagUflCharInfo

{

DWORD OffAddr : 26; // 当前字符点阵数据的起始地址

DWORD Width : 6; // 字符点阵的像素的宽度( 目前最大支持点阵< 64) } UFL_CHAR_INDEX;

4.点阵数据

即当前字库中所有包含字符的点阵数据集合。数据存储方式为:横向高到底位存储。如:10110011 00011010 即为B3. 1A

八. 图文示例(unicode)

解析如下:

1.文件头(蓝色框选部分)

前16 Byte

55 46 4C 11 -- 标识头,判断是否为合法的字库文件。

55 = 'U',表示该文件为Unicode 编码格式的字库文件。

46 = 'F',4C = 'L'

11 表示该字库文件版本信息为:Version 1.1

3C 52 00 00 -- 文件总长度

03 -- 包含几个Section。03 即表示分为3 段。

18 -- 字体高度. 即表示字体大小为24(0x18)点阵。

A0 00 -- 选择的字符集标志位。即0x00A0(00000000 10100000),根据字符集序, 故得出当前选择为:中欧+西欧字符集。

0F 01 -- 有效点阵字符数。即表示有0x10F 个字符的点阵数据。

00 00 -- 预留字节

2.段信息(粉红色框选部分)

nSection * sizeof(FL_SECTION_INF) = 3 * 8 = 24Byte此文件分3 段,解析如下:

Section1.

20 00 -- First character, 即此段首字符为0x20

D2 06 -- Last character,即此段尾字符为0x6D2

28 00 00 00 -- 指向的是首字符(0x20)的字符信息(即检索表)的起始地址,

即为0x28.

Section2.

01 0E -- First character, 即此段首字符为0xE01

5B 0E -- Last character,即此段尾字符为0xE5B

F4 1A 00 00 -- 指向的是首字符(0xE01)的字符信息(即检索表)的起始地址,即为0x1AF4.

Section3.

0C 20 -- First character, 即此段首字符为0x200C

22 21 -- Last character,即此段尾字符为0x2122

60 1C 00 00 -- 指向的是首字符(0x200C)的字符信息(即检索表)的起始地址,

即为0x1C60.

3). 检索表(绿色下划线标记部分)

((Section[0].Last - Section[0].First + 1) * sizeof(UFL_CHAR_INDEX )+ …+ (Section[n-1].Last -Section[n-1].First + 1) * sizeof(UFL_CHAR_INDEX ))

如何快速找到一个字符的字符信息(检索表)?

a. 先比较确定该字符属于哪一段。

b. 精确计算其起始地址。(起始地址= 字符的unicode 码- Section[x].First )*sizeof(UFL_CHAR_INDEX ) + Section[x].OffAddr)

4). 点阵数据(蓝色下划线标记部分)

例如:字符大写字母‘E’(0x45)。

a) 读取字库文件头,获取字库的基本信息。

b) 确定属第几段。因为0x45 >= 0x20 && 0x45 <= 0x6D2, 故可确定其在第1 段。

c) 计算点阵信息的起始地址。起始地址=(0x45-0x20)*4+0x28 = 0xBC 故可

得出点阵信息:

04 27 00 40, 即为0x40002704 (01000000 00000000 00100111 00000100)。

高6 位,表示当前字符的宽度。故得出010000—16,即当前字符的宽度为16.

低26 位,表示当前字符点阵数据的偏移地址。故得出00 00000000 00100111 00000100---0x2704。即当前字符点阵数据的偏移地址为0x2704。

d) 蓝色下划线标记部分,即为大写字母‘E’的点阵数据。因为它的字体高度为24,宽度为16,故其点阵数据长度为:24 * (16+8-1)/8 = 48

九.代码封装及实现

//添加unicode点阵字库支持多语言显示

#define MAX_FONT_SIZE 64

#define PIXELS_PER_BYTE 8

#define FONT_INDEX_TAB_SIZE 4 //单个字符对应的字体检索信

息长度为4Byte (b0~b25: 记录点阵信息的起始地址, b26~b31: 记录当前字符的象

素宽度)

#define GET_FONT_WIDTH(charinfo) (charinfo >> 26)

#define GET_FONT_OFFADDR(charinfo) (charinfo & 0x3ffffff)

#define DB2UC(c1,c2) (c1 | (((U16)c2)<<8))

class CCharmapUnicode

{

public:

CCharmapUnicode();

~CCharmapUnicode();

int Init(char* pFileName);

void UnInit();

//获取字符的点阵信息

int FontReadCharDotArray(WORD wCode, BYTE *fontArray, WORD

*bytesPerLine);

private:

int OpenFontFile(char *pFontFile);

int ReadFontHeader(PFL_HEADER pfl_header);

int font_read_sections();

void font_release_sections();

DWORD read_char_info_unicode(WORD wCode);

BYTE FontGetYsize();

int FontReadCharDistX(WORD wCode);

private:

BOOL m_bInited;

FILE* m_pf;

DWORD m_dwCharInfo;

FL_HEADER m_fl_header;

BYTE* m_pFontlibData;

int m_FontDataOffset;

};

点阵字库的原理

点阵字库的原理 2010-12-06 17:12:46 分类: 点阵字库的原理(引文) 所有的汉字或者英文都是下面的原理, 由左至右,每8个点占用一个字节,最后不足8个字节的占用一个字节,而且从最高位向最低位排列。 生成的字库说明:(以12×12例子) 一个汉字占用字节数:12÷8=1····4也就是占用了2×12=24个字节。 编码排序A0A0→A0FE A1A0→A2FE依次排列。 以12×12字库的“我”为例:“我”的编码为CED2,所以在汉字排在CEH-AOH=2EH区的D2H-A0H=32H个。所以在12×12字库的起始位置就是[{FE-A0}*2EH+32H]*24=104976开始的24个字节就是我的点阵模。 其他的类推即可。 英文点阵也是如此推理。 在DOS程序中使用点阵字库的方法 首先需要理解的是点阵字库是一个数据文件,在这个数据文件里面保存了所有文字的点阵数据.至于什么是点阵,我想我不讲大家都知道的,使用过"文曲星"之类的电子辞典吧,那个的液晶显示器上面显示的汉子就能够明显的看出"点阵"的痕迹.在PC 机上也是如此,文字也是由点阵来组成了,不同的是,PC机显示器的显示分辨率更高,高到了我们肉眼无法区分的地步,因此"点阵"的痕迹也就不那么明显了. 点阵、矩阵、位图这三个概念在本质上是有联系的,从某种程度上来讲,这三个就是同义词.点阵从本质上讲就是单色位图,他使用一个比特来表示一个点,如果这个比特为0,表示某个位置没有点,如果为1表示某个位置有点.矩阵和位图有着密不可分的联系,矩阵其实是位图的数学抽象,是一个二维的阵列.位图就是这种二维的阵列,这个阵列中的(x,y) 位置上的数据代表的就是对原始图形进行采样量化后的颜色值.但是,另一方面,我们要面对的问题是,计算机中数据的存放都是一维的,线性的.因此,我们需要将二维的数据线性化到一维里面去.通常的做法就是将二维数据按行顺序的存放,这样就线性化到了一维. 那么点阵字的数据存放细节到底是怎么样的呢.其实也十分的简单,举个例子最能说明问题.比如说16*16 的点阵,也就是说每一行有16个点,由于一个点使用一个比特来表示,如果这个比特的值为1,则表示这个位置有点,如果这个比特的值为0,则表示这个位置没有点,那么一行也就需要16个比特,而8个比特就是一个字节,也就是说,这个点阵中,一行的数据需要两个字节来存放.第一行的前八个点的数据存放在点阵数据的第一个字节里面,第一行的后面八个点的数据存放在点阵数据的第二个字节里面,第二行的前八个点的数据存放在点阵数据的

点阵显示汉字滚动图解

点阵的汉字滚动实现其实很简单,用一句话概括就是:一边在行(列)上进行扫描,一遍循环依次取出显示代码输入到列(行)上。 以我们板上载有的8×8点阵为例,当要实现2个汉字的滚动时,我们把整个滚动的过程拆开,会发现每一次完整的滚动,点阵要显示2×8=16个状态。我们可以把两个汉字的行(或列)扫描代码通过字模提取软件提出后保存在数组里,然后顺序循环的去取数组里的数据放到行(或列)上就可。 我们用图示来解析一下整个过程。我们假设要显示两个汉字”人”和”天”的左右滚动。 首先我们假设在行和列的输入数据中,1代表亮,0代表灭。数组code里保存好从字模软件中按行提取出来的扫描码,假设code[15]=A0,A1,A2,A3,A4,A5,A6,A7,B0,B1,B2,B3,B4,B5,B6,B7(A代表“人”字的列扫描码,B代表“天”字的列扫描码) 思路是这样的: 第1个时段T1:(完整的汉字“天”) 时刻t0,R=0000_0001,L=A0,R0那一列显示;、 时刻t1,R=0000_0010,L=A1,R1那一列显示; 时刻t2,R=0000_0100,;L=A2,R2那一列显示; ……. 时刻t7,R=1000_0000,;L=A7,R7那一列显示; 然后又回到时刻t0的扫描状态,循环扫描。只要在这个T1时间段内按这样扫描的话,就形成了A0—A7所代表的数据,即汉字“人”

第2个时段T2:(开始滚入“天”字) 时刻t0,R=0000_0001,L=A1,R0那一列显示;、 时刻t1,R=0000_0010,L=A2,R1那一列显示; 时刻t2,R=0000_0100,L=A3,R2那一列显示; ……. 时刻t7,R=1000_0000,L=B0,R7那一列显示;“天”字第1列 然后又回到时刻t0的扫描状态,循环扫描。只要在这个T2时间段内按这样扫描的话,就形成了A1—A7和B0所代表的数据,如下图: 第3个时段T3: 时刻t0,R=0000_0001,L=A2,R0那一列显示;、 时刻t1,R=0000_0010,L=A3,R1那一列显示; 时刻t2,R=0000_0100,;L=A4,R2那一列显示; ……. 时刻t6,R=1000_0000,L=B0,R6那一列显示;“天”字第1列 时刻t7,R=1000_0000,L=B1,R7那一列显示;“天”字第2列 然后又回到时刻t0的扫描状态,循环扫描。只要在这个T3时间段内按这样扫描的话,就形成了A1—A7和B0--B1所代表的数据,如下图: 第4个时段T4: 时刻t0,R=0000_0001,L=A2,R0那一列显示;、 时刻t1,R=0000_0010,L=A3,R1那一列显示; 时刻t2,R=0000_0100,;L=A4,R2那一列显示; ……. 时刻t5,R=1000_0000,L=B0,R5那一列显示;“天”字第1列 时刻t6,R=1000_0000,L=B1,R6那一列显示;“天”字第2列 时刻t7,R=1000_0000,L=B2,R7那一列显示;“天”字第3列 然后又回到时刻t0的扫描状态,循环扫描。只要在这个T4时间段内按这样扫描的话,就形成了A1—A7和B0—B2所代表的数据,如下图:

点阵汉字的原理及应用

点阵汉字原理与应用 一.汉字的编码 由于在电脑中,所有的数据都是以0和1保存的。因此,想要用计算机来显示汉字前提就是要将汉字以二进制,即0和1形式进行编码。 GBK内码 在英文的显示操作中,一个字母、数字及字符均由1个ASCII码表示,并且由于英文字符种类相对较少,故其ASCII码是小于等于127的。而汉字由于种类繁多,每个汉字有2个ASCII码构成,这两个ASCII码称为汉字的GBK内码,通常用十六进制表示。例如,“啊”的GBK内码=B0 A1。汉字的GBK内码一定大于A0H,即160,目的是为了防止与英文的ASCII码产生冲突。 区位码 为了使每一个汉字有一个全国统一的代码,1980年,我国颁布了第一个汉字编码的国家标准:GB2312-80《信息交换用汉字编码字符集》基本集,这个字符集是我国中文信息处理技术的发展基础,也是目前国内所有汉字系统的统一标准。由于国标码是四位十六进制,如汉字的GBK内码,为了便于交流,大家常用的是四位十进制的区位码。所有的国标汉字与符号组成一个94×94的矩阵(见图1所示)。在此方阵中,每一行称为一个"区",每一列称为一个"位",因此,这个方阵实际上组成了一个有94个区(区号分别为0 1到94)、每个区内有94个位(位号分别为01到94)的汉字字符集。一个汉字所在的区号和位号简单地组合在一起就构成了该汉字的"区位码"。区位码和GBK内码之间可以相互转换,区位码=GBK内码-A0H。例如:“啊”的GBK内码=B0 A1,则其区码=B0-A0=10H=16,而其位码=A1-A0=01,所以“啊”的区位码=16 01,为4位十进制码。 在区位码中,01-09区为682个特殊字符,16~87区为汉字区,包含6763个汉字。其中16-55区为一级汉字(3755个最常用的汉字,按拼音字母的次序排列),56-87区为二级汉字(3008个汉字,按部首次序排列)。因此利用区位码便可实现对6000多个汉字的提取。 图1汉字的区位码表

字模生成原理

字模生成原理 本设计中因为使用汉字的点阵显示,需要提取汉字字模,因此我们首先来了解汉字点阵字模的提取方法。 汉字的点阵字模是从点阵字库文件中提取出来的。例如常用的16×16点阵HZK16文件,12×12点阵HZK12文件等等,这些文件包括了GB 2312字符集中的所有汉字。现在只要弄清汉字点阵在字库文件中的格式,就可以按照自己的意愿去显示汉字了。 下面以HZK16文件为例,分析取得汉字点阵字模的方法。 HZK16文件是按照GB 2312-80标准,也就是通常所说的国标码或区位码的标准排列的。国标码分为94 个区(Section),每个区94 个位(Position),所以也称为区位码。其中01~09 区为符号、数字区,16~87 区为汉字区。而10~15 区、88~94 区是空白区域。 如何取得汉字的区位码呢?在计算机处理汉字和ASCII字符时,使每个ASCII字符占用1个字节,而一个汉字占用两个字节,其值称为汉字的内码。其中第一个字节的值为区号加上32(20H),第二个字节的值为位号加上32(20H)。为了与ASCII字符区别开,表示汉字的两个字节的最高位都是1,也就是两个字节的值都又加上了128(80H)。这样,通过汉字的内码,就可以计算出汉字的区位码。 具体算式如下: qh=c1-32-128=c1-160 wh=c2-32-128=c2-160 或 qh=c1-0xa0 wh=c2-0xa0 qh,wh为汉字的区号和位号,c1,c2为汉字的第一字节和第二字节。 根据区号和位号可以得到汉字字模在文件中的位置: location=(94*(qh-1)+(wh-1))*一个点阵字模的字节数。 那么一个点阵字模究竟占用多少字节数呢?我们来分析一下汉字字模的具体排列方式。 例如下图中显示的“汉”字,使用16×16点阵。字模中每一点使用一个二进制位(Bit)表示,如果是1,则说明此处有点,若是0,则说明没有。这样,一个16×16点阵的汉字总共需要16*16/8=32个字节表示。字模的表示顺序为:先从左到右,再从上到下,也就是先画左上方的8个点,再是右上方的8个点,然后是第二行左边8个点,右边8个点,依此类推,画满16×16个点。 对于其它点阵字库文件,则也是使用类似的方法进行显示。例如HZK12,但是HZK12文件的格式有些特别,如果你将它的字模当作12*12位计算的话,根本无法正常显示汉字。因为字库设计者为了使用的方便,字模每行的位数均补齐为8的整数倍,于是实际该字库的位长度是16*12,每个字模大小为24字节,虽然每行都多出了4位,但这4位都是0(不显示),并不影响显示效果。还有UCDOS下的HZK24S(宋体)、HZK24K(楷体)或HZK24H(黑体)这些打印字库文件,每个字模占用24*24/8=72字节,不过这类大字模汉字库为了打印的方便,将字模都放倒了,所以在显示时要注意把横纵方向颠倒过来就可以了。 这样我们就完全清楚了如何得到汉字的点阵字模,这样就可以在程序中随意的显示汉字了。 5.7.2 字模提取程序 如果在程序中使用的汉字数目不多,也可以不必总是在程序里带上几百K的字库文件,也

16 16点阵显示汉字汇编

ORG 0000H LJMP START ORG 000BH LJMP TIMER0 ORG 0030H START: MOV SCON,#00H ;串口0方式传送显示字节;MOV R5,#10 MOV R0,#00H MOV R1,#00H MOV R3,#00H MOV TMOD,#01H MOV TH0,#00H MOV TL0,#00H SETB EA SETB ET0 START1: CJNE R1,#00H,S0 MOV DPTR,#TAB0 S0: CJNE R1,#01H,S1 MOV DPTR,#TAB1 S1: CJNE R1,#02H,S2 MOV DPTR,#TAB2 S2: CJNE R1,#03H,START2 MOV DPTR,#TAB3 START2: MOV R2,#00H DIS: MOV P1,R2 MOV R0,#02H DD: CLR A MOVC A,@A+DPTR MOV SBUF,A WAIT: JNB TI,W AIT CLR TI INC DPTR DJNZ R0,DD CLR P1.6 SETB P1.6 ;STcp上升沿,将寄存器中的数据传出 ;SJMP $ LCALL DELAY INC R2 SETB P1.7 CLR P1.7 CJNE R2,#10H,DIS INC R3 CJNE R3,#10H,START1 MOV R3,#00H

SETB P1.7 LCALL DELAY1 ;DJNZ R5,START1 ;一个字闪烁一会 ;MOV R5,#10 SETB P1.7 SETB F0 SETB TR0 CJNE R0,#08H,$ ;利用定时器黑屏一会 MOV R0,#00H CLR TR0 CLR P1.7 INC R1 CJNE R1,#04H,S3 MOV R1,#00H S3: LJMP START1 DELAY: MOV R6,#0AH LOOP: MOV R7,#09FH ;1μs DJNZ R7,$ ;2×256μs DJNZ R6,LOOP ;1μs× (1+2×256+1)×10 RET DELAY1: MOV R6,#0AFH LOOP1: MOV R7,#0AFH ;1μs DJNZ R7,$ ;2×256μs DJNZ R6,LOOP1 ;1μs× (1+2×256+1)×10 RET TIMER0: MOV TH0,#00H MOV TL0,#00H INC R0 RETI TAB0: DB 01H,00H,01H,00H,01H,00H,01H,00H,01H,00H,21H,04H,21H,04H,21H,04H DB 21H,04H,21H,04H,21H,04H,21H,04H,21H,04H,7FH,0FCH,20H,04H,00H,00H ;山 TAB1: DB 10H,04H,10H,84H,10H,84H,10H,84H,10H,84H,10H,84H,10H,84H,10H,84H DB 10H,84H,10H,84H,10H,84H,10H,84H,10H,84H,20H,84H,20H,04H,40H,00H ;川TAB2: DB 20H,00H,17H,0FEH,10H,08H,00H,08H,88H,08H,4BH,0C8H,52H,48H,12H,48H DB 22H,48H,23H,0C8H,0E2H,48H,20H,08H,20H,08H,20H,08H,20H,28H,20H,10H ;河 TAB3: DB 20H,80H,10H,40H,17H,0FEH,00H,40H,80H,80H,49H,10H,4BH,0F8H,10H,08H DB 12H,50H,12H,50H,0E2H,50H,22H,50H,24H,52H,24H,52H,28H,4EH,20H,00H ;流

12点阵汉字在HD系列机型中的应用-汉字点阵字库原理

汉字点阵字库原理 一、汉字编码 1.区位码 在国标GD2312—80中规定,所有的国标汉字及符号分配在一个94行、94列的方阵中,方阵的每一行称为一个“区”,编号为01区到94区,每一列称为一个“位”,编号为01位到94位,方阵中的每一个汉字和符号所在的区号和位号组合在一起形成的四个阿拉伯数字就是它们的“区位码”。区位码的前两位是它的区号,后两位是它的位号。用区位码就可以唯一地确定一个汉字或符号,反过来说,任何一个汉字或符号也都对应着一个唯一的区位码。汉字“母”字的区位码是3624,表明它在方阵的36区24位,问号“?”的区位码为0331,则它在03区3l位。 2.机内码 汉字的机内码是指在计算机中表示一个汉字的编码。机内码与区位码稍有区别。如上所述,汉字区位码的区码和位码的取值均在1~94之间,如直接用区位码作为机内码,就会与基本ASCII码混淆。为了避免机内码与基本ASCII码的冲突,需要避开基本ASCII码中的控制码(00H~1FH),还需与基本ASCII码中的字符相区别。为了实现这两点,可以先在区码和位码分别加上20H,在此基础上再加80H(此处“H”表示前两位数字为十六进制数)。经过这些处理,用机内码表示一个汉字需要占两个字节,分别称为高位字节和低位字节,这两位字节的机内码按如下规则表示: 高位字节=区码+20H+80H(或区码+A0H) 低位字节=位码+20H+80H(或位码+AOH) 由于汉字的区码与位码的取值范围的十六进制数均为01H~5EH(即十进制的01~94),所以汉字的高位字节与低位字节的取值范围则为A1H~FEH(即十进制的161~254)。 例如,汉字“啊”的区位码为1601,区码和位码分别用十六进制表示即为1001H,它的机内码的高位字节为B0H,低位字节为A1H,机内码就是B0A1H。

字体库制作的方法和流程哦

字体库制作的方法和流 程哦 Pleasure Group Office【T985AB-B866SYT-B182C-BS682T-STT18】

字体库制作的方法和流程 利用现有程序进行字库制作 如果你是专业字体设计师,那么你一定有过制作一套属于自己的全新的中文字库之梦。但是,毕竟中文字库属大字符集(当然是或大于6763个字符的字库),个人想徒手直接设计一整套中文字体谈何容易!其繁复程度足以使任何人却步。但是,当今世界上图形图像程序软件已经如此发达,难道没有什么办法利用现在已有的通用软件,将复杂的工作简化,使设计师自己可以独立完成这一艰巨的工作的吗本文就时装字体的设计经验,介绍一种相对简单的方法,帮你完成的心愿。这种方法的意义在于能够使得字体设计工作化繁为简。 大前提:如果你仅仅是为了设计新字样或仅只几个字,那么研读本文对你没多大帮助。本文并不介绍新字样的设计。本文是帮你在已产生了字体设计的设想之后,如何利用已有资源、不花费太大力气地将整个字库(6763汉字或更多,如欲英文、数字、标点一起处理的话,包括进来即可)制作出来。因此,你必须会使用图形处理的通用软件,这包括:PhotoShop、Illustrator、CorelDRAW(考虑到字库制作的特殊性,应当以矢量软件为主)。什么程度算是“会使用”本文是在介绍字库设计方法,不是软件教学,所以,软件使用方法点到为止。如果不能看明白,说明你还不会熟练使用,即请自行加强研究。这样做的主要目的是为了在尽量短的文字里多介绍具体方法的关键之处。 关于硬件要求。说起来似乎可笑:介绍软件应用的文章,说什么硬件要求!尽管如此,还是想说说:CPU当然越快越好,硬盘也是越快越大越好。硬盘设定提醒:最好把Windows的临时文档和应用图形图像软件的临时文档不要放到同一分区上,找一个空(没有存放任何文件)的分区更好,另放一张空的物理硬盘最好。如有条件,专门软件可做一个内存虚拟的硬盘,把那些需要倒来倒去的文件放在上面,速度会快不少。关键是内存一定要大。会使用PS的人都知道,如果图大,内存又不很充足的话,PS的某些特效是不能使用的。Illustrator有过之而无不及。即便内存足够充分,也会经常出现out of memory的要求放弃选框。我们最好不要让它出现。内存越大越好。最小 1G。为什么要这么强调计算机的物理指标因为我们希望一次性地将GB2312里面的6763个字符处理完毕,这样才可以达到简化字符操作之目的。所以我们最好把所有文字放在一个文件里。在建立文件的时候,如果有可能,当然建立一个包含6763个汉字的文档。这样才能在以后动作时不必反复操作。这时就看出机器物理指标的重要性了。如果你一时无法满足要求,那么就只好退而求其次,将6763个字分割成为几块,分块处理,也没什么别的,就是麻烦点。 具体方法 1. 启动PS,将现有字体按照需要排列在一起,位图化。注意:1,字与字之间留有足够的空隙,以免在分割字符的时候相互影响。2,字要足够大,一般应当在10cm10cm 以上,否则矢量化的时候,精密程度会受影响。 2. 按照事先的设想,对每一个字的位图笔画进行分层划分,一层一种笔画。例如1层,丶;2层,一;3层,丨;4层,丿;5层…….汉字所有不同的笔画加在一起,大

点阵字库生成的原理

所有的汉字或者英文都是下面的原理, 由左至右,每8个点占用一个字节,最后不足8个字节的占用一个字节,而且从最高位向最低位排列。 生成的字库说明:(以12×12例子) 一个汉字占用字节数:12÷8=1····4也就是占用了2×12=24个字节。 编码排序A0A0→A0FE A1A0→A2FE依次排列。 以12×12字库的“我”为例:“我”的编码为CED2,所以在汉字排在CEH-AOH=2EH区的D2H-A0H=32H个。所以在12×12字库的起始位置就是[{FE-A0}*2EH+32H]*24=104976开始的24个字节就是我的点阵模。 其他的类推即可。 英文点阵也是如此推理。 51单片机的13×14点阵缩码汉卡 我们历时数载,开发成"51单片机13×14点阵缩码汉卡",适用于目前国内外应用最为广泛的MCSX-51及其兼容系列单片机. 与此同时,还开发了13×14点阵汉字字模.13×14点阵字模,可完全与目前通用的16×16点阵汉字字模媲美,其在单片机和嵌入式系统的汉字显示应用中也具有明显的经济价值和实用意义. 1.单片机目前的汉字显示 信息交流的最主要方式之一即文字交流,但由于我国方块汉字数量繁多,构形迥异,使汉字显示一直是我国计算机普及的障碍.随着计算机技术的迅速发展,PC机的汉字显示已不成问题.但对于成本低、体积小、应用灵活且用量极为巨大的单片机而言,因其结构简单,硬件资源十分有限,其汉字显示仍面对着捉襟见肘,力不从心的窘境. 目前单片机的汉字显示有三种基本方法. ①采用标准字库法.即将国标汉字库固人ROM中,将单片机的硬件和软件进行特别扩展后以显示汉字.众所周知,即使是16×16点阵标准字库,也须占用200KB以上的单元内存,而就目前主流5l系列单片机而言,最大寻址范围仅64KB,即使程序区与数据区合起来也仅128KB内存.因此,若不加特别的扩展设计,不要说检字程序和用户空间,仅字库都装不下.这种方法虽然可以方便地使用现成标准字库,但却需占用大量的硬件和软件资源,增加很大一部分成本和设计难度,所以不经常使用. ②字模直接固化法.即将所显示的汉字,依先后顺序将其字模一一从标准字库中提取后,重新固化,予以显示.此法虽为简捷,但只适于显示少量汉字,且字模的制取繁琐,软件的修改维护都很困难. ③带索引小字库法.即将欲显示文件中的汉字字模,从标准字库中逐一提取固化,制成小型字

点阵式汉字LED显示屏的原理与制作(精)

单片机应用 电子报 /2004年 /08月 /08日 /第 011版 / 点阵式汉字 L ED 显示屏的原理与制作 深圳石学军 本文介绍一种实用汉字显示屏的制作。该显示屏使用 256只高亮度发光二极管组成 16×16点阵。为降低制作难度 , 此处仅作了一个字的轮流显示。 每个字由 16×16点阵组成 , 每点为一个像素 , 每个字的字形为一幅图像 , 故此屏既可以显示汉字 , 也可以显示 256像素范围内的任何图形。下面以显示“大” 字为例说明其扫描原理。 在 UCDOS 宋体字库中 , 每个字由 16×16, , 一个字要拆分为上、下两部分 , 由两个 8×16 部分 , 即第 0列的 P00~, 时 , 只有 P05点亮 , 即 04H 。 , 即从 P27向 P20方向扫描 , 这一 , , , 依照这个方法 , 扫描 32个 8位 , 得出汉字“大” :04H、 00H 、 04H 、 02H 、 04H 、 02H 、 04H 、 04H 、 04H 、 08H 、 04H 、 30H 、 05H 、0C0H 、 0FEH 、 00H 、 05H 、 80H 、 04H 、 60H 、 04H 、 10H 、 04H 、 08H 、 04H 、 04H 、 0CH 、 06H 、 04H 、 04H 、 00H 、 00H 。 无论显示何种字体或图像 , 都可以用这个方法分析扫描代码。目前有很多现成的汉字字模生成软件 , 软件打开后输入汉字 , 点“检取” 键 , 即可自动生成十六进制汉字代码。此例使用 4-16线译码器 74L S154完成列显示 , 行的 16条线接 P0口和 P2口。源程序清单如下 : OR G 00H LOOP :MOVA , #0FFH ; 初始化

16-16点阵LED显示汉字汇编语言

LED16X16点阵显示课程设计报告 学院 专业 班级 学生 指导老师

一、设计目的 本次课程设计目的剖析试验箱,利用微机接口芯片8255,并行控制LED点阵显示;其次就是掌握8088微机系统与LED点阵显示模块之间接口电路设计及编程,了解LED点阵显示的基本原理和如何来实现汉字的的循环左移显示。 二、设计容 利用598H试验系统扩展接口CZ7座,在控制板MC1上以并行通信的方式控制LED点阵显示。要求自建字库,编制程序实现点阵循环左移显示汉字,并要求通过protues仿真软件画出电路图,运行程序。 三、硬件电路设计 整个电路由8088CPU,两片8255,1个74ls373,1个74LS138,1个16×16的LED,5个7407。该电路可静态显示1个16*16位的汉字,也可循环显示。 1、8255 Intel8255A是一种通用的可编程序并行I/O接口芯片,又称“可编程外设接口芯片”,是为Intel8080/8085系列微处理据设计的,也可用于其它系列的微机系统。可由程序来改变其功能,通用性强、使用灵活。通过8255A,CPU可直接同外设相连接,是应用最广的并行I/O接口芯片。其中含3个独立的8位并行输入/输出端口,各端口均具有数据的控制和锁存能力。可通过编程设置各端口的工作方式和数据传送方向(入/出/双向)。 2、138译码器 译码器是组合逻辑电路的一个重要的器件,74LS138的输出是低电平有效,故实现逻辑功能时,输出端不可接或门及或非门,74LS138与前面不同,其有使能端,故使能端必须加以处理,否则无法实现需要的逻辑功能。发光二极管点亮只须使其正向导通即可,根据LED的公共极是阳极还是阴极分为两类译码器,即针对共阳极的低电平有效的译码器;针对共阴极LED的高电平输出有效的译码器。 3、373锁存器 74LS373是低功耗肖特基TTL8D锁存器,有8个相同的D型(三态同相)锁存器,由两个控制端(11脚G或EN;1脚OUT、CONT、OE)控制。当OE接地时,若G为高电平,74LS373接收由PPU输出的地址信号;如果G为低电平,则将地址信号锁存。工作原理:74LS373的输出端O0—O7可直接与总线相连。当三态允许控制端OE为低电平时,O0—O7为正常逻辑状态,可用来驱动负载或总线。当OE为高电平时,O0—O7呈高阻态,即不驱动总线,也不为总线的负载,但锁存器部的逻辑操作不受影响。当锁存允许端LE为高电平时,O随数据D而变。当LE为低电平时,O被锁存在已建立的数据电平。 4、LED 动态显示原理 LED点阵显示系统中各模块的显示方式:有静态和动态显示两种。静态显示原理简单、控制方便,但硬件接线复杂,在实际应用中一般采用动态显示方式,动态显示采用扫描的方式工作,由峰值较大的窄脉冲电压驱动,从上到下逐次不断地对显示屏的各行进行选通,同时又向各列送出表示图形或文字信息的列数据信号,反复循环以上操作,就可显示各种图形或文字信息。 点阵式LED绝大部分是采用动态扫描显示方式,这种显示方式巧妙地利用了人眼的视

单片机用矢量字库的C语言调用

单片机用矢量字库的C语言调用 用TFT 320 X 240分辨路的液晶屏的显示效果如下图: 本文演示了用STM8S的单片机调用矢量模块的宋体,黑体字符。模块大小比一元硬币稍大,目前该模块已经批量生产,该模块采用SPI串行总线作为数据接口,包含汉字一二三四级字库,生僻字库,以及汉字的标点符号,数字符号,特殊符号,希腊字母,采用几何学中二次B样条曲线及直线来描述字体的外形轮廓,既可以作打印字体,又可以用作屏幕显示;由于它是由指令对字形进行描述,因此它与分辨率无关,输出时总是按照打印机的分辨率输出。无论放大或缩小,字符总是光滑的,不会有锯齿出现。目前可输出16X16点阵到256X256点阵大小的汉字和字母字符,使用方便,速度较快。适合打印机等行业采用,本模块采用3.3V 供电,工作温度在-25~+80℃ 引脚顺序为1:CS# (模块片选控制脚),2:SO(数据输出脚)3:BUSY_G(芯片忙判断脚)4:地线,5:SI(数据输入脚)6:CLK(时钟输入脚),7:RESET(芯片复位脚),8:VCC(芯片电源脚),本模块使用简单,硬件连接示意图如下: 硬件连接示意图

本例采用STM8来驱动该模块,流程为: 以ST的低端单片机STM8为例的读取过程:实现程序如下: void Delay(unsigned long nCount) { for(; nCount!=0; nCount--); } ;

int main() { unsigned int n=0; zk_data[0]=0x03; //表示显示的是宋体的字符 zk_data[1]=0x30; //汉字长度48 zk_data[2]=0x30; //汉字宽度48 zk_data[3]=0x30; //汉字厚度48 RCC_Configuration(); GPIO_Configuration(); TFT_Init(); clr_TFT(); RSTL; //模块复位 Delay(140); RSTH; Delay(140); for(n=0;n<4;n++) { Send_Byte(zk_data[n]);//发送要显示的字体风格,字体大小。设置一次即可。 Delay(14); } while(1) { unsigend char *text="啊"; for(n=0;n<2;n++) //将啊字的信息发送到模块 { CS_L2; Delay(14); Send_Byte(*text,*(text+1)); Delay(14); CS_H2; } while(CBUSY==SET); //判忙,等待模块内部处理完毕 for(n=0;n<288;n++) //开始接收啊字的数据排置为横置横排 { CS_L2; Delay(14); Bits[n]=Get_Byte(); Delay(14); CS_H2; } Display(Bits,9,10,48,48,0xf800,0x00ff); //将啊字的数据送到TFT液晶屏上面显示 Delay(144);

51单片机驱动16×16LED点阵显示动画汉字汇编程序

51单片机驱动16×16LED点阵显示动画汉字汇编程序 这里提供一个完整的AT89S51单片机驱动驱动led点阵显示具有动画效果的汉字的汇编程序列子. ORG 0000H ST: MOV A,#0FFH ;初始化 MOV P1,A MOV P2,A MOV P3,A MOV P0,A CLR A MOV R0,#50H ;显示缓存清0 MOV R1,#20H ;控制清0的次数 ST0: MOV R0,A INC R0 DJNZ R1,ST0 ;正文显示 CHINESE: MOV DPTR,#TAB1 ;查表指针指向TAB1 LCALL HZ ;结束动画 SCREE: MOV DPTR,#TAB2;查表指针指向TAB2 ACALL DD MOV DPTR,#TAB3;查表指针指向TAB3 ACALL DD MOV DPTR,#TAB4;查表指针指向TAB4 ACALL DD LJMP CHINESE ;显示8幅画面子程序,SCREE专用,用字模软件字要倒置(表必须深256字节) DD: MOV B,#00H

MOV R0,#08H ;显示8幅画面 AJMP CC CC0: MOV A,B ADD A,#20H ;指向下一幅画面 MOV B,A CC: MOV R7,#08H ;画面停留时间 MOV R3,B MOV 37H,R0 LCALL ENTER DIS00: LCALL DISPLAY DJNZ R7,DIS00 MOV R0,37H DJNZ R0,CC0 RET ;汉字上移子程序,可显示8个汉字,(表必须深256字节) HZ: MOV R3,#00H ;查表偏移量 MOV R5,#81H ;查表128次 MOVBACK: MOV R4,#10H ;使显示完一个汉字 MOVBACK0: MOV R7,#02H ;一桢画面显示时间 MOV R0,#6DH ;低8位R0指向显示缓存倒数第3个字节,以备与最后1个字节交换MOV R1,#6CH ;高8位R1指向显示缓存倒数第4个字节,以备与倒数第2个字节交换MOV R2,#10H ;存后移的次数 DJNZ R5,MOVBACK1 RET ;显示完该表,返回 MOVBACK1: MOV A,R0 ;低8位被后移的存单元数据暂存入A INC R0 ;后移两字节 INC R0 MOV R0,A ;放入要移的低8位数据 MOV A,R0 ;R0指向下一个要后移的存单元 SUBB A,#04H

16×16点阵字库

16×16点阵字库 2007-06-25 09:07 分类:单片机 一般我们使用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循环一位位地显示. #include "graphics.h" #include "stdio.h" main() { int i=VGA,j=VGAHI,k; unsigned char mat[16][2],chinease[3]="我"; FILE *HZK; if((HZK=fopen("hzk16","rb"))==NULL)exit(0); initgraph(&i,&j,""); i=chinease[0]-0xa0;j=chinease[1]-0xa0; /*获得区码与位码*/ fseek(HZK,(94*(i-1)+(j-1))*32l,SEEK_SET); fread(mat,32,1,HZK); for(j=0;j<16;j++) for(i=0;i<2;i++) for(k=0;k<8;k++) if(mat[j][i]&(0x80>>k)) /*测试为1的位则显示*/ putpixel(i*8+k,j,WHITE); getch();

GUI原理4 - 矢量字体

说起矢量字体,不得不说一下多边形填充原理。本来是想将多边形填充作为单独的一节内容,可惜说得太细我累大家也累。 多边形填充最需要关注的就是斜率,计算每条边的斜率,从而得到每条边在每一行上的切点。然后从左到右,将各切点连接起来,逐行进行。 多边形有两种填充方式,Alternate和Winding。矢量字体主要用的前一种方式,而winding会将所有的切点都连接起来,没有了中间的分隔区域。 比如,在Alternate模式下,从最左边的切点1,会连接切点2,然后从切点3连接到切点4,而2到3是不连接的。这样就形成了一个空洞,也是矢量字的奥秘所在。Winding模式会将所有的切点都连接起来,即从最左边的一直画到最右边。 FillMode

多边形组——PolyPolygon 将多个多边形组合成一个组,从而形成复杂的多边形组。同样,这个组也依赖于FillMode的填充模式。下面我们来看一下中文的“口”是如何写出来的。 “口”由两条多边形组合而成,根据FillMode为Alternate,相重叠的部分不显示。用笔在字的中央画一条横线,就可以找到4个交点,而交点2到3是不连接的,这样就形成了“口”中间的洞。

微软Arial字体中“S”的曲线 微软的Arial字体中存储的“S”,就是多个Bezier3点组成的。点41是锚点,而40和42是控制点,来控制通过41的曲线的张力。在点的定义上,有on curve和not on curve两种,通常将在曲线上的点定为锚点,而不在曲线上的点为控制点。 这是我年初的时候,为了研究矢量字体,将字母P用微软的方式输出后,再读取字库点阵数据,使用红叉画出字库中所有的点。P是由两条Bezier曲线包围而成的,第二条起着切割的目的,已形成P中间的圆洞。 看看字母“B”的填充。 字体是如何保证对齐的呢?原来在字库内部,有一个基准线,就好像信纸的虚线,用来水平方向对齐的,同样,也有个垂直方向的基准线。每个字都有上浮和下沉的高度,这也是该字的最上和最下的点所处的位置。

基于FPGA的LED16×16点阵汉字显示设计(VHDL版)

毕业设计(论文)开题报告 设计(论文)题目基于FPGA的LED 16×16点阵汉字显示设计 一、选题的背景和意义: LED点阵显示屏是集微电子技术、计算机技术、信息处理技术于一体的大型显示屏系统。它以其色彩鲜艳,动态范围广,亮度高,寿命长,工作稳定可靠等优点而成为众多显示媒体以及户外作业显示的理想选择。受到体育场馆用LED显示屏需求快速增长的带动,近年来,中国LED 显示屏应用逐步增多。目前,LED已经广泛应用在银行、火车站、广告、体育场馆之中。而随着奥运会、世博会的临近,LED显示屏将广泛的应用在体育场馆以及道路交通指示中,LED显示屏在体育广场中的应用将出现快速增长。 因此,本设计是很有必要的,之所以基于FPGA设计是因为现场可编程门阵列(FPGA)设计周期小,灵活度高,适合用于小批量系统,提高系统的可靠性和集成度。并且采用编写灵活的VHDL 语言编写主程序。本设计可以方便的应用到各类广告宣传中。 二、课题研究的主要内容: 1. 实现16×16点阵的汉字显示; 2. 实现有限汉字显示; 4. 实现汉字的滚动显示; 5. 完成方案论证。 三、主要研究(设计)方法论述: 通过去图书馆查阅书籍收集资料,同时在搜索引擎上检索资料,分析借鉴已有类似产品、设计方案与成功经验,选择几种可行方案比对,最后确定最切实可行的方案展开设计。 通过Multisim或Quartus软件对系统进行模拟仿真,对电路功能进行改进与完善。 在EDA试验箱上进行调试。 四、设计(论文)进度安排:

时间(迄止日期)工作内容 2010.5.17-5.23 理解并确认毕业设计任务书,撰写完成毕业设计开题报告(第1周) 2010.5.24-5.30 完成调研与资料收集、整理 (第2周) 2010.5.31-6.6 设计方案及原理框图确定 (第3周) 2010.6.7-7.4 电路资料收集,单元电路设计 (第4、5、6、7周) 2010.7.5-7.18 电路仿真与改进、完善 (第8、9周) 2010.19-8.1 资料整理 (第10、11周) 2010..8.2-8.8 书写毕业设计报告 (第12周) 2010.8.9-8.16 (第13周)修改毕业设计报告并整理装订 五、指导教师意见: 指导教师签名:年月日六、系部意见: 系主任签名:年月日 目录

点阵LED显示原理与点阵汉字库的编码和从标准字库中提取汉字编码的方法

点阵LED显示原理与点阵汉字库的编码和从标准字库中提取汉字编码的方法。2009年06月03日下午 04:27 一.实验要求 编程实现中英文字符的显示。 二.实验目的 1.了解LED点阵显示的基本原理和实现方法。 2.掌握 三.实验电路及连线 点阵显示模块WTD3088的(红色)列输入线接至内部LED的阴极端,行输入线接至内部LED的阳极端(若阳极端输入为高电平,阴极端输入低电平,则该LED 点亮)。发光点的分布如图22-0所示。

Fig 22-0 WTD3088 LED分布 如图22-1示,本实验模块使用74LS374来控制列输入线的电平值。将74LS374的某输出置0,则对应的LED阴极端被置低。如图22-2示,本实验模块使用 74LS273来控制行输入线,并通过9013提供电流驱动。将74LS273的某输出置1,则对应的LED阳极端被置高。每次系统重新开启或总清后,74LS273输出为全0,LED显示被关闭。 通过编程控制各显示点对应LED阳极和阴极端的电平,就可以有效的控制各显示点的亮灭。 Fig 22-1 LED模块及列扫描电路

Fig 22-2 行扫描电路 Fig 22-3地址译码电路

本实验模块使用4块WTD3088组成16×16点阵,以满足汉字显示的要求。为了方便的控制四个单元,使用了一片74LS139译码,产生四个地址片选信号:CLKR1= CSLED,CLKR2= CSLED+1,用于行控制的两片74LS273;CLKC1= CSLED+2,CLKC2= CSLED+3,用于列控制的两片74LS374。 实验接线:按示例程序,模块的CSLED接51/96地址的8000H。 四.实验说明 使用高亮度LED发光管构成点阵,通过编程控制可以显示中英文字符、图形及视频动态图形。LED显示以其组构方式灵活、亮度高、技术成熟、成本低廉等特点在证券、运动场馆及各种室内/外显示场合得到广泛的应用。 所显示字符的点阵数据可以自行编写(即直接点阵画图),也可从标准字库(如ASC16、HZ16)中提取。后者需要正确掌握字库的编码方法和字符定位的计算。 实验盘片中“字符转换”子目录下提供的,可方便的将单个字符的码表从标准字库Asc16,Hzk16中提取出来。具体使用方法是运行上述可执行程序,根据提示输入所需字符(如是汉字还需要先启动dos下的汉字环境,如ucdos,pdos95等)。程序将该字符的码表提取出来,存放在该字符ASC或区位码为文件名称的.dat 文件中。用户只需将该文件中内容拷贝、粘贴到自己的程序中即可。但需要注意字节排列顺序、字节中每一位与具体显示点的一一对应关系,必要时还要对码表

字体库制作的方法和流程(免费哦)

字体库制作的方法和流 程 利用现有程序进行字库制作 如果你是专业字体设计师,那么你一定有过制作一套属于自己的全新的中文字库之梦。但是,毕竟中文字库属大字符集(当然是或大于6763个字符的字库),个人想徒手直接设计一整套中文字体谈何容易!其繁复程度足以使任何人却步。但是,当今世界上图形图像程序软件已经如此发达,难道没有什么办法利用现在已有的通用软件,将复杂的工作简化,使设计师自己可以独立完成这一艰巨的工作的吗?本文就时装字体的设计经验,介绍一种相对简单的方法,帮你完成的心愿。这种方法的意义在于能够使得字体设计工作化繁为简。 大前提:如果你仅仅是为了设计新字样或仅只几个字,那么研读本文对你没多大帮助。本文并不介绍新字样的设计。本文是帮你在已产生了字体设计的设想之后,如何利用已有资源、不花费太大力气地将整个字库(6763汉字或更多,如欲英文、数字、标点一起处理的话,包括进来即可)制作出来。因此,你必须会使用图形处理的通用软件,这包括:PhotoShop、Illustrator、CorelDRAW(考虑到字库制作的特殊性,应当以矢量软件为主)。什么程度算是“会使用”?本文是在介绍字库设计方法,不是软件教学,所以,软件使用方法点到为止。如果不能看明白,说明你还不会熟练使用,即请自行加强研究。

这样做的主要目的是为了在尽量短的文字里多介绍具体方法的关键之处。 关于硬件要求。说起来似乎可笑:介绍软件应用的文章,说什么硬件要求?!尽管如此,还是想说说:CPU当然越快越好,硬盘也是越快越大越好。硬盘设定提醒:最好把Windows的临时文档和应用图形图像软件的临时文档不要放到同一分区上,找一个空(没有存放任何文件)的分区更好,另放一张空的物理硬盘最好。如有条件,专门软件可做一个内存虚拟的硬盘,把那些需要倒来倒去的文件放在上面,速度会快不少。关键是内存一定要大。会使用PS的人都知道,如果图大,内存又不很充足的话,PS的某些特效是不能使用的。Illustrator有过之而无不及。即便内存足够充分,也会经常出现out of memory的要求放弃选框。我们最好不要让它出现。内存越大越好。最小1G。为什么要这么强调计算机的物理指标?因为我们希望一次性地将GB2312里面的6763个字符处理完毕,这样才可以达到简化字符操作之目的。所以我们最好把所有文字放在一个文件里。在建立文件的时候,如果有可能,当然建立一个包含6763个汉字的文档。这样才能在以后动作时不必反复操作。这时就看出机器物理指标的重要性了。如果你一时无法满足要求,那么就只好退而求其次,将6763个字分割成为几块,分块处理,也没什么别的,就是麻烦点。 具体方法

相关文档
最新文档