赞助论坛
  • 33254阅读
  • 0回复

sunplus 字库的制作教程 [复制链接]

楼层直达
axuey  
发帖
50
精华
0
金币
209
威望
5
贡献
6
好评
12
注册
2008-03-13
楼主    axuey 发表于: 2008-12-25 09:49:47 
[post] 字库的制作
一、位图文件的制作:
1.制作字的bmp图。
汉字位图大小:32*24
英文字母位图大小:16*24
文字为白色,背景为绿色。
若为汉字,通常使用:黑体,小二,加粗。
敬请参看范例:0_new.bmp,chao.bmp。
2.bmptoc.exe所在文件夹中保存所要制作的字的bmp图。
3.在同一个文件夹编写list文本(txt文件必须命名为"list")。
敬请参看范例:list.bmp
文件中参数的表明格式:(例如:要在字库中加入"好"字)
hao.bmp        hao       好        0x15        0x20        0x18
位图文件名    英文名    中文名    字的ID    位图的长    位图的宽
注意:
(1)字的ID以及位图的长和宽须用十六进制数来表示。
(2)最后一行要以回车结束。
4.双击bmptoc.exe(或在dos下用bmptoc 回车),选择3(即选用与DVD相配的方式),随即会生成文件font.c。
敬请参看范例:font.c
5.然后将生成的位图的图形矩阵copy至原有的font_ori.c文件中,还要在文件后半部分的数组fn_table700[]和fn_table700_2[]或中添上对应的字的ID等信息。
二、合程序的制作:
1、 将生成的位图文件加入到font_ori.c中。
2、 在cchar_ori.h中定义加入的字符。
3、 在cfont.h中,用生成的字符组成字符串。
4、 将生成的字符串在osd_str.h中定义。
5、 在cfg_customers.h定义语言现实。
注意:
1、 font_ori.c中共用的字符点阵不能占用。
2、 cchar_ori.h中位置不能中间空着。
3、 osd_str.h中顺序不能改动。
例子:添加中文字:“国”
1.做一个“国”字的32×24的bmp图guo.bmp,使用黑体,小二,加粗字体。文字为白色,背景为绿色。
2.将bmp图,bmptoc.exe工具和list.txt文件放在同一个文件夹。编辑list.txt,文件中参数的表明格式:
guo.bmp        guo       国   0x15       0x20        0x18
位图文件名    英文名    中文名    字的ID    位图的长    位图的宽
注意: (1)字的ID以及位图的长和宽须用十六进制数来表示。
(2)最后一行要以回车结束。
3.双击bmptoc.exe,选择3(即选用与DVD相配的方式),随即会生成文件font.c。
4.将生成的字库点阵文件找到:
const BYTE encoding_guo_0015[] =
{
   0x20,0x18,0x04,
   0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0xe3, 0x80, 0x03, 0x80, 0xe3, 0x80,
   0x03, 0x8f, 0xff, 0xf8, 0x03, 0x8f, 0xff, 0xf8, 0x7f, 0xf8, 0xe3, 0x80,
   0x7f, 0xf8, 0xe3, 0x80, 0x03, 0x83, 0xff, 0xe0, 0x07, 0x83, 0xff, 0xe0,
   0x07, 0xc3, 0x80, 0xe0, 0x07, 0xf3, 0xff, 0xe0, 0x0f, 0xfb, 0x80, 0xe0,
   0x0f, 0xbb, 0xff, 0xe0, 0x1f, 0x83, 0xff, 0xe0, 0x3f, 0x80, 0x1c, 0x00,
   0x7b, 0x9f, 0xff, 0xfc, 0x73, 0x9f, 0xff, 0xfc, 0x03, 0x80, 0x3e, 0x00,
   0x03, 0x80, 0x7f, 0x00, 0x03, 0x81, 0xf7, 0x80, 0x03, 0x87, 0xe3, 0xe0,
   0x03, 0xbf, 0x80, 0xfc, 0x03, 0xbc, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00
};
并在相关的数组里面添加,找到encoding_guo_0015; //15(数组中的地址),并添加到数组中(注意不要重复使用同一个地址)
5.在cchar_ori.c中为其定义
#define Ch_guo        "\x15"
注意: 点阵放在font_ori.c中的第一个数组里面就
#define Ch_guo     "\x15"
点阵放在font_ori.c中的第一个数组里面就
#define Ch_guo     "\r\x15"
6.在cfont.h中可能会将“国“字连成字符串,比如
#define OS_OPEN           _cat_(Ch_zhong, Ch_guo)
这样的意思就是把“中国”显示在OPEN的位置上(确保字库中有“中”)
7.这样就可以直接在osd_str.h中调用OS_OPEN了,就会在出仓的地方显示“中国“。
实现在任何位置显示希望的文字。下面将主要步骤记录如下:
  以英文为例:在显示屏中部显示一个字符串 LYC
1) 在osd.h 中定义:#define STR_OS_LYC   100,其中100为任意值,但在定义中必须保证没有另外定义100的变量。
2)在osd1中修改函数:osd_create_region1(t_osd_region *p, int X, int Y, t_osd_region *prev,BYTE bColorMode,BYTE bScanMode) {} 相应的变量即可得到相应要显示的区域。
3)完成以上两步以后就可以在待显示地方将相应的数据显示出来,如在ircmd.c中的命令中void   ircmd_next(void)中显示:LYC,即PrintOsdMsg(STR_OS_LYC,REGION1,0,0);即会显示出 LYC。
  关于别的文字显示与此类似,只要保证字库中有相应的文字及定义的变量,同时打开相应的语言即可。[/post]
本帖最近评分记录: 1 条评分