找回密码
 注册
搜索
查看: 2732|回复: 13

[讨论] 怎么样做字库呀?

[复制链接]
发表于 2007-6-28 09:49:31 | 显示全部楼层 |阅读模式
不怕大家笑话,转行不久。现在手头上有一个汉化项目,硬是摸不到边,我想问一下大家,怎么样做字库,能不能例证一下,就两字的就好。做好了字库,我又怎么样能调用到里面的字呢?另外我想知道,英语输出到LCD,直接就是输出字符串,汉语能做到吗?怎么弄,例如想在源程序里这样写mystring[]=L"汉语输出",能不能做到,怎么做?
发表于 2007-6-28 17:33:14 | 显示全部楼层
很想了解。
点评回复

使用道具 举报

发表于 2007-6-29 00:13:12 | 显示全部楼层
做字库可不是一件很简单的事情,你还是多看看,应该有现成的资料。
单片机很多程序就是涉及到液晶显示汉字啊
点评回复

使用道具 举报

 楼主| 发表于 2007-6-29 10:13:59 | 显示全部楼层
<DIV class=quote><B>以下是引用<I>harbincampus</I>在2007-6-29 0:13:12的发言:</B>
做字库可不是一件很简单的事情,你还是多看看,应该有现成的资料。
单片机很多程序就是涉及到液晶显示汉字啊</DIV>

您就不能说两句吗?您说一个小学生为什么要人教,一个大学生他为什么可以不用老师教。原因不就是一个没入门,不知道学什么,怎么学?一个入了门,能抓住要点,我现在对这就是还没入门呀,大哥。不过还是非常感谢!
点评回复

使用道具 举报

发表于 2007-7-4 16:13:58 | 显示全部楼层
漏个丑,大家见笑.
1,汉字在LCD上是由一个个点组成,有笔画的地方是亮点,相反没有笔画就是暗点,可怎么知道亮点或暗点的数据呢,那就是你的字库里存在那些数据实现的.所以建议你去看看字库原理.
2,你所说的lcd能实现字符显示那说明你所用的lcd在字符字库,要想显示汉字要么找带汉字字库的(听说有),要么就在程序送数据(即告诉lcd哪个点亮,哪个点暗)
3,你搜索hzk16.exe,你输入汉字他就给你转化了
点评回复

使用道具 举报

发表于 2007-7-5 20:36:01 | 显示全部楼层
楼主,我帮你做~~你给多少钱?

深圳的朋友~
点评回复

使用道具 举报

 楼主| 发表于 2007-7-6 11:51:03 | 显示全部楼层
<DIV class=quote><B>以下是引用<I>kingss</I>在2007-7-5 20:36:01的发言:</B>
楼主,我帮你做~~你给多少钱?

深圳的朋友~</DIV>

你要是把我这个项目全部做出来,我把项目奖金全部给你。你自己认为给多少才合适撒?:)
点评回复

使用道具 举报

发表于 2007-7-6 12:42:41 | 显示全部楼层
大家不要往钱眼里钻!!
点评回复

使用道具 举报

发表于 2007-7-6 16:56:18 | 显示全部楼层
楼主选用的是什么芯片?应该会附带字符库程序的.
点评回复

使用道具 举报

发表于 2007-7-8 11:46:10 | 显示全部楼层
去网上找一下,有程序可以直接做出字库的点阵数组!
点评回复

使用道具 举报

发表于 2007-7-13 14:20:07 | 显示全部楼层
先找个字模提取软件,把字模提取出来,再找个lcd显示程序即可
点评回复

使用道具 举报

发表于 2007-7-19 10:38:38 | 显示全部楼层
你把汉字看成是BMP图片就好了,把图片放在程序里,要用的时候,把那些图片贴到LCD上面。
中间涉及的步骤应该有:
1,通过汉字的编号代码GB,GBK码找到对应汉字图片的数据地址
2,确定LCD上放的位置
3,把汉字图片数据一个一个点的搬到LCD的显示内存那。如果是8位或者16位屏幕,就可以一次搬多好几个点。(这部分算是驱动部分)

当然你要考虑是不是有超越LCD显示范围的问题,如果有,就要进行越界处理。

不同大小的汉字16×16,12×12,24×24,就需要有不同大小的字库数据表,当然编程技巧可以用24×24缩到12×12,就可以剩下12×12的数据文件,节省空间。
点评回复

使用道具 举报

发表于 2007-8-20 21:07:40 | 显示全部楼层
关注
点评回复

使用道具 举报

发表于 2007-8-23 13:19:15 | 显示全部楼层
下载一个GB点阵字库,  存放到FLASH里(如果你项目采用的是硬盘存储的话则更好),
当需要显示某一汉字的时候(有是否是GB汉字的判别方法), 读出GB点阵字库, 按照查找
方法(很简单的)查找该汉字在字库中的点阵信息, 然后根据此信息, 画出BMP图片并显示在LCD上(芯片驱动应该含有显示BMP的接口,)


1 、判断是否是GB2312

bool isGBCode(const string& strIn)

{

    unsigned char ch1;

    unsigned char ch2;

   

    if (strIn.size() >= 2)

    {

        ch1 = (unsigned char)strIn.at(0);

        ch2 = (unsigned char)strIn.at(1);

        if (ch1>=176 && ch1<=247 && ch2>=160 && ch2<=254)

            return true;

        else return false;

    }

    else return false;

}




二、查找某一汉字在GB字库里的点阵信息

    为了处理汉字的方便,在查找汉字的时候,我们通常会用到hash的方法,那怎么来确定一个汉字位置呢?这就和每种编码的排列有关了,这里主要给出一种hash函数的策略。

    对于GB2312编码,设输入的汉字为GBword,我们可以采用公式(C1-176)*94 + (C2-161)确定GBindex。其中,C1表示第一字节,C2表示第二字节。具体如下:

    GBindex = ((unsigned char)GBword.at(0)-176)*94 + (unsigned char)GBword.at(1) - 161;
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-11-26 12:48 , Processed in 0.049530 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表