GB2312字库制作方法
今天花了几个小时做了一下汉字的字库,以前做过16*16点阵的字库但是花了很长时间。现在摸索出简单的方法供大家参考。希望对大家有所帮助。点击此处下载armok01140782.rar
上面上传的这个文件里包含了一下内容:
st12.bin 和 st16.bin 为宋体字库
kt12.bin 和 kt16.bin 为楷体字库
ziku.txt为按顺序写有8178个汉字和字符的txt文档
ziku.exe 我写的一个小程序,配合“牧马字模0.84测试版”生成bin文件。
“牧马字模0.84测试版”程序在本站
http://www.ouravr.com/es_lcd_chinese_pixel_generat_software.html
现在说一下字库制作方法。
1)打开“牧马字模0.84测试版”程序
2)打开文件ziku.txt(上传的那个文件)
3)选择你要的取模方式和大小然后按上方“输出”按钮 并等待其完成
4)保存文件 例如 字库.txt
5)把ziku.exe(上传的程序)复制到4)中文件保存的地方
6)在cmd窗口里进入文件路径 按下图操作
http://cache.amobbs.com/bbs_upload782111/files_6/armok01140784.JPG
最后就会生成一个ziku.bin文件,这个就是你需要的文件。
不会MFC只写了个命令行程序,大家凑合着用吧。 沙发1!!!!! 恩 好的谢谢
为什么输入“新建文件夹”输出时文字排列就不对了?
http://cache.amobbs.com/bbs_upload782111/files_6/armok01140798.JPG
-----此内容被poppush于2007-01-08,18:43:02编辑过 顶 想问一下unicode与gb2312的转换原理是怎么样的啊? 好,很实用啊。 Sorry 上面发的程序ziku.exe有个bug 我在做GBK字库的时候发现了问题,GB2312没问题。
请下载这个
点击此处下载armok01140819.zip
回2楼
它内部作了排序处理,我这么认为的。因为它并没有打乱我作的按内码顺序放的字库文件。
它这个做法也许是为了你只要显示一段文字(比如一篇文章)中间有重复的字,这样就不许要你去从中挑出不重复的字,你外排好序你在程序中就可以用2分法查找点阵在什么地方。
这样解释应该够全面了吧。(我的个人理解)
回4楼
两者之间的转化这能通过查表,两者没有对应关系。所以要建一张unicode-2312的对照表。
当然如过想节省程序运行时间,要建两张表,分别按照各自的线性关系放,这样就免去查找的所耗的时间了。但是这样字库就会变大。我觉得用空间去换取速度可行。我现在正在做这二者的转换。打算用GBK字库 大概兼容2万多个汉字。 bozai的回复总是这个急时
通过一张对照表
那这个对照表它的原理是怎么样的啊?
如果我知道一个汉字的unicode码,怎么样在对照表里面找到对应的gb2312码? 好,谢谢 好,谢谢 用龙版的字模3啊 谢谢 好教程,我顶 回7楼:
只要弄一张这样的表,如2312-unicode 把2312对应的unicode码按照2312的顺序存放,因为2312的存放是有顺序的,只要根据汉字的内码计算出汉字在这张表的偏移量然后到这张表相应的位置找就可以了。 10楼:
我通过你在c51bbs上的回的帖了
http://www.c51bbs.com/product/zimo3.htm
好软件,但是要收费。不然批量生成字模会在字中央加一道横线。 那就是说这个转换表的大小应该跟GB2312的大小是一样的咯.
因为uicode和gb2312的都是2字节. 根据汉字的内码在转换表里面找到对应的UNICODE的编码?
那样好大啊gb2312有262K吧.怎么我看到有一些说转换表才8K呢? 262K那是点阵文件,一个汉字32个字节的数据。
8K的转换表可能是一级字库的转换表,整个2312的转换表应该有16K 即约8K个汉字。 还有不太懂啊
把2312对应的unicode码按照2312的顺序存放.
就把一个汉字来说;"啊"对应的机内码就知道,然后转换成区位码,然后按区位码在点阵字库里面找对应的点阵数据.
但是现在知道"啊"的unicode码,通过什么方法在转换表中找到它的机内码或者区位码呢?
转换的原理. 晕,那个UNICODE与GB2312的表是这样的,按照GB2312中汉字的顺序存放了相应汉字的UNICODE编码,你知道了“啊“的UINCODE后,查这个表,发现它存放在第一个位置,那么说明这个汉字就是GB2312汉字库的第一个区的第一个汉字!知道它是GB2312的第一个字之后,它的区位码也就知道了。 那这样的话 我不是知道一个unicode编码就要遍历这个查找表才有可能找到我需要的gb2312的编码啊?(如果是gb2312的最后一个汉字) 所以要做两张表啊,一张2312的 一张unicode的。
做mp3只要知道unicode怎么转成2312,如果真正做文件系统当然两张都要了。 楼主的这种东西有用啊,比hzk16,hzk12这两种文件特定的取模方式有用多了,根据不同的液晶驱动算法去得出不同的汉字库,的确利害,不过就是不知道如何得到比较全面的中字TXT,谢!实在感谢! top 谢谢。 不错的东东,做个记号。以后也许用得着 波仔好贴多啊 我在玩GPRS模块的时候也碰到了unicode码可我对些码还不熟悉 楼主可以指点下在哪能查到相关的入门资料吗???谢谢 其它外文字体:如日文、韩文能效仿做么? to 【26楼】 caai2005
看另一个帖子
to 【27楼】 1235679
这个帖子里的是不行的,如果你学会我处理这个问题的思路应该会很容易。 楼主,看了上面几楼的讨论,我萌生了一个问题,既然是在知道汉字unicode码情况下查找此汉字对应的GB2313码,
那我们只要按汉字unicode码的大小顺序存放GB2313码,不就可以很简单的找到吗? to 【29楼】 511cxl
我就是这样做的呵,不过这戏码不是所有的都能找的全. 留个脚印 我也留个位置,有空仔细拜读。 留个脚印 记下 不顶不行 顶 记号.......... 有用,收下 留个脚印 请教一下,我在做字库的时候,按照bozai的方法打开cmd的命令,输入相应路径,结果就打开了相应的文件,并没有创建文件 请看楼主位图片的第8行。
不是直接输入文件的路径(...\GB2312>宋体.txt)而是要输入命令(...\GB2312>ziku 宋体.txt)。 thanks!真打算做12x16的字库呢 试试 自己做字库爽呀 mark,谢谢 很好很方便 up 记号 强,实用 顶 mark! mark! mark 学习 强 我的字库直接放LPC2387的片内FLASH里面, 字库和代码是分别烧进去的,
先用用BIN文件转换到 0x40000基址上的HEX文件,然后用ISP下载进去。
用下面的一条语句就可以找到字库位置,速度相当快
#define GB2312_ZK_BASE 0x40000// 字库大小192KB, 放在高256K区
unsigned char *p = (unsigned char *)(GB2312_ZK_BASE + ((((hiByte - 0xa1) * 94) + (loByte - 0xa1)) * 24));
hiByte 和 loByte 分别是字体内码的高低字节 unicode 和汉字编码没有线形的公式,也就是无法通过运算转换,只能查表 mark 英文和特殊字符是怎么寻址? 正好要用到。谢谢!! 收藏先 好东西收藏了 mark GB2312字库制作方法 收藏了,有空好好看看 收藏一个先:) 正在学习GSM无线点阵屏!
Unicode码子是解析出来了,可不知道在程序中怎么使用BIN中的内容! mark,
谢谢波仔 顶 mark marmk mark,真的是好东西啊。太好了。千万不要沉了。
虽然关键是牧马字模强大,但是楼主的这个小工具太实用了。 谢谢BOZAI 为什么我总是无法生成那个BIN文件?
ziku.exe我也放在ziiku.txt一起了!!!用cmd打开总是只打开ziku.txt记事本!!! 谢谢BOZAI 非常好的软件啊!! m 终于找到,合适的了。 mark 好东西啊 mark mark mark mark 好东西 mark mark 收藏备用,谢谢 好。
在UE里编辑中文,然后改成hex编辑。
这个是什么方式呢? 我这里也有一个多国字库生成软件,可是怎么才能上传呢??? dig 回去试一下。 顶 56楼的这段更有价值,我有库但是不会用。。。
#define GB2312_ZK_BASE 0x40000// 字库大小192KB, 放在高256K区
unsigned char *p = (unsigned char *)(GB2312_ZK_BASE + ((((hiByte - 0xa1) * 94) + (loByte - 0xa1)) * 24));
hiByte 和 loByte 分别是字体内码的高低字节
这个怎么算的? 支持楼主。 谢谢波仔的软件 弄了一下午 呵呵 顶一个 收藏了 mark