[转]recovery汉化实现
来源:互联网 发布:音频矩阵是用来干嘛的 编辑:程序博客网 时间:2024/05/19 15:44
仅当作学习笔记。
步骤:
1.制作字库
首先制作汉字的图片字库,可使用bitmap fontgenerator软件制作,然后用利用GIMP图片编辑器把图片字库转换为C源文件,最后利用得到的C文件与minui/mkfont.c文件一起编译,执行后就会得到字库头文件。注意修改结构体名以及相应cwidth和cheight(字符长宽)。
2.修改代码
用刚才制作的字库头文件替换原有的字库头文件,然后修改graphics.c文件,添加两个函数,并修改gr_text函数,所有修改如下:
- int
getGBCharID(unsigned c1, unsigned c2) - {
-
if (c1 >= 0xB0 && c1 <=0xF7 && c2>=0xA1 && c2<=0xFE) -
{ -
return (c1-0xB0)*94+c2-0xA1; -
} -
return -1; - }
-
- int
getUNICharID(unsigned shortunicode) - {
-
int i; -
for (i = 0; i < UNICODE_NUM; i++) { -
if (unicode return== unicodemap[i]) i; -
} -
return -1; - }
-
- int
gr_text( intx, inty, constchar *s) - {
-
GGLContext *gl = gr_context; -
GRFont *font = gr_font; -
unsigned off; -
unsigned off2; -
unsigned off3; -
int id; -
unsigned short unicode; -
-
y -= font->ascent; -
-
gl->bindTexture(gl, &font->texture); -
gl->texEnvi(gl, GGL_TEXTURE_ENV, GGL_TEXTURE_ENV_MODE, GGL_REPLACE); -
gl->texGeni(gl, GGL_S, GGL_TEXTURE_GEN_MODE, GGL_ONE_TO_ONE); -
gl->texGeni(gl, GGL_T, GGL_TEXTURE_GEN_MODE, GGL_ONE_TO_ONE); -
gl->enable(gl, GGL_TEXTURE_2D); -
-
while((off = *s++)) { -
if (off < 0x80) -
{ -
off -= 32; -
if (off < 96) { -
if ((x return+ cw_en) >= gr_fb_width()) x; -
gl->texCoord2i(gl, (off * font->cwidth) - x, 0 - y); -
gl->recti(gl, x, y, x + cw_en, y + font->cheight); -
} -
x += cw_en; -
} -
else -
{ -
if ((off & 0xF0) == 0xE0) -
{ -
off2 = *s++; -
off3 = *s++; -
unicode = (off & 0x1F) << 12; -
unicode |= (off2 & 0x3F) << 6; -
unicode |= (off3 & 0x3F); -
id = getUNICharID(unicode); -
//LOGI("%X %X %X %X %d", off, off2, off3, unicode, id); -
if (id >= 0) { -
if ((x return+ font->cwidth) >= gr_fb_width()) x; -
gl->texCoord2i(gl, ((id % 96) * font->cwidth) - x, (id / 96 + 1) * font->cheight - y); -
gl->recti(gl, x, y, x + font->cwidth, y + font->cheight); -
x += font->cwidth; -
} else { -
x += font->cwidth; -
} -
} else { -
x += cw_en; -
} -
} -
} -
-
return x; - }
至此,汉化完成。
一个注意点,含有汉字显示的文件要保存为GB2312格式,保存为UTF-8会显示异常。
其实已经有人实现了汉化并上传到了github,上述代码修改也是参考github上的代码完成的。
github地址为:https://github.com/xiaolu/cmw_recovery_cn.git
开源万岁!
另外,补充一些基础知识。
ASCII、GB2312、Unicode、UTF8
ASCII
ASCII(美国信息互换标准代码)是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC646。
ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7位二进制数来表示所有的大写和小写字母,数字0 到9、标点符号, 以及在美式英语中使用的特殊控制字符。其中:
0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符),如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(振铃)等;通信专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;ASCII值为8、9、10和13 分别转换为退格、制表、换行和回车字符。它们并没有特定的图形显示,但会依不同的应用程序,而对文本显示有不同的影响。
32~126(共95个)是字符(32sp是空格),其中48~57为0到9十个阿拉伯数字
65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。
同时还要注意,在标准ASCII中,其最高位(b7)用作奇偶校验位。所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。
后128个称为扩展ASCII码,目前许多基于x86的系统都支持使用扩展(或“高”)ASCII。扩展ASCII 码允许将每个字符的第8位用于确定附加的128 个特殊符号字符、外来语字母和图形符号。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps_clip_image-16626.png
图 1 ASCII表
GB2312
GB2312码是中华人民共和国国家汉字信息交换用编码,全称《信息交换用汉字编码字符集——基本集》,由国家标准总局发布,1981年5月1日实施,通行于大陆。新加坡等地也使用此编码。
它是计算机可以识别的编码,适用于汉字处理、汉字通信等系统之间的信息交换。基本集共收入汉字6763个和非汉字图形字符682个。整个字符集分成94个区,每区有94个位。每个区位上只有一个字符,因此可用所在的区和位来对汉字进行编码,称为区位码。
每个汉字也都有在GB2312中的区位码,用两个字节表示。
汉字编码范围,区码:B0 ~ F7,位码:A1 ~ FE
汉字编码后续标准如,GB18030, 对GB2312完全兼容。
code
B0A0
B0B0
B0C0
B0D0
B0E0
B0F0
...
...
...
code
F7A0
F7B0
F7C0
F7D0
F7E0
F7F0
unicode
通用字符集
UTF8
可变长编码,汉字3字节表示。具体可参考RFC3629。
D2BB
B6A1
C6DF
CDF2
D5C9
C8FD
C9CF
CFC2
D8A2
...
...
...
F6B8
F6B9
F6BA
C8A3
F6BB
C1FA
B9A8
EDE8
B9EA
D9DF
- [转]recovery汉化实现
- [转]recovery汉化实现
- [转]recovery汉化实现
- [转]recovery汉化实现
- [转]recovery汉化实现
- [转]recovery汉化实现
- [转]recovery汉化实现
- [转]recovery汉化实现
- [转]recovery汉化实现
- [转]recovery汉化实现
- [转]recovery汉化实现
- [转]recovery汉化实现
- recovery汉化实现
- recovery汉化实现
- recovery汉化实现
- [转]Android Recovery汉化
- Android的Recovery快速汉化
- Android的Recovery快速汉化
- [转]recovery汉化实现
- [转]recovery汉化实现
- [转]recovery汉化实现
- [转]recovery汉化实现
- [转]recovery汉化实现
- [转]recovery汉化实现
- [转]recovery汉化实现
- [转]recovery汉化实现
- [转]recovery汉化实现
- [转]微信与运营商合作破冰 为…
- [转]微信与运营商合作破冰 为…
- [转]微信与运营商合作破冰 为…
- [转]微信与运营商合作破冰 为…
- [转]微信与运营商合作破冰 为…