学习数码相框2.2.0.0数码相框_字符的编码方式
2.1字符的编码方式
全世界统一编码表unicode 编码
文字编码方式源文件用不同的编码方式编写,会导致执行结果不一样。编译程序时,要指定字符集
man gcc , /charset
-finput-charset=charset
//表示源文件的编码方式, 默认以UTF-8来解析
-fexec-charset=charset 表示可执行程序里的字时候以什么编码方式来表示,默认是UTF-8
gcc -o a a.c //
gcc -finput-charset=GBK -fexec-charset=UTF-8 -o utf-8_2 ansi.c
2.2 英文字母、汉字的点阵显示
测试:1. 配置、修改内核支持把lcd.c编译进去
//编译测试代码
arm-linux-gcc -o show_font show_font.c
//把文件拷贝到网络文件系统里面去
cp show_font /work/nfs_root/fs_mini_mdev_new
cp HZK16 /work/nfs_root/fs_mini_mdev_new
//配置、修改内核支持把lcd.c编译进去
cp /work/drivers_and_test_new/10th_lcd/lcd.c drivers/video/
修改drivers/video/Makefile
#obj-$(CONFIG_FB_S3C2410) += s3c2410fb.o
obj-$(CONFIG_FB_S3C2410) += lcd.o
//配置内核,包含LCD
make menuconfig
Device Drivers -->
Multimedia support -->
Support for frame buffer devices -->
<M> S3C2410 LCD frame buffwe support
输入y编进内核里面
<*> S3C2410 LCD frame buffwe support
make uImage
//把内核拷贝到网络文件系统里面去
cp arc/arm/boot/uImage /work/nfs_root
测试:2. 使用新内核启动,测试应用程序
//使用内核来启动
nfs 32000000 192.168.1.123:/work/nfs_root/uImage; bootm 32000000
//输入回车激活控制台
//运行LCD应用程序
./show_fort
//其他板卡用到的命令
//设置启动参数
set bootargs console=ttySAC0,115200 root=/dev/nfs nfsroot=192.168.1.123:/work/nfs_root/fs_mini_mdev_new ip=192.168.1.17
nfs 32000000 192.168.1.123:/work/nfs_root/uImage_tq2440; bootm 32000000
nfs 32000000 192.168.1.123:/work/nfs_root/uImage_mini2440; bootm 32000000
2.3freetype理论介绍
-
矢量字体文件介绍:
-
1.若干条曲线的关键点。
2.使用数学曲线(贝赛尔曲线)连接关键点。
3.填充空间,填充曲线所组成的图形
下载freetype文件
看懂这两个文件
freetype-2.4.10\docs\tutorial\step1.html
freetype-2.4.10\docs\tutorial\step2.html
也可以看翻译版本的:FreeType 字体引擎分析与指南
http://wenku.baidu.com/view/2d24be10cc7931b765ce155b.html
先看看中文文档。
-
想象文字显示过程:
-
1.给定一个字母“A”,0X41,“中”(gbk,unicode,big5),可以确定它的编码值
2.根据“编码值”,从字体文件中找到“glyph(关键点)”“charmaps(字符映射表)”
3.设置字体大小
4.用某些函数把“glyph”里面的点缩放为之前设置的字体大小
5.转换为位图点阵
6.在LCD上显示出来
-
如何编写代码
-
1.包含头文件,初始化。FT_Init_Freetype
2.加载字体Face、FT_New_Face(打开字体文件)
3.设置字体大小,由2个函数可以控制(见下面)
error = FT_Set_Char_Size(
face, /* handle to face object */
0, /* char_width in 1/64th of points */
16*64, /* char_height in 1/64th of points */
300, /* horizontal device resolution */
300 ); /* vertical device resolution */
error = FT_Set_Pixel_Sizes(
face, /* handle to face object */
0, /* pixel_width */
16 ); /* pixel_height */
4.根据编码值加载glyph
//选择charmap,(GBK,unicode,BIG5中某一个编码方式)(默认unicode)
error = FT_Select_CharMap(
face, /* target face object */
FT_ENCODING_BIG5 ); /* encoding */
//1找到
glyph_index = FT_Set_char_Index(face, charcode);
//2取出
error = FT_Load_Glyph(
face, /* handle to face object */
glyph_index, /* glyph index */
load_flags ); /* load flags, see below */
//前面三个函数等效于这一个函数(可以代替)
error = FT_Load_Char( face, charcode, FT_LOAD_RENDER );
//3转为位图
error = FT_Render_Glyph( face->glyph, /* glyph slot */
render_mode ); /* render mode */
5.变换:移动,旋转
error = FT_Set_Transform(
face, /* target face object */
&matrix, /* pointer to 2x2 matrix 旋转角度*/
&delta ); /* pointer to 2d vector 偏移位置*/
LCD使用的是这种坐标x’,y’
字体文件和字体函数使用的是笛卡尔坐标x,y
x = x’
y = ( y’-200)*64
编译程序,过程
tar xjf freetype-2.4.10.tar.bz2
cd freetype-2.4.10/
./configure
make
sudo make install
//指定头文件目录-I /usr/local/include/freetype2
//增加函数库文件-lfreetype
//增加数学库-lm
gcc -o example1 example1.c -I /usr/local/include/freetype2 -lfreetype -lm
//指定输入字符集为GBK,指定输出字符集为UTF-8
gcc -finput-charset=GBK -fexec-charset=UTF-8 -o example1 example1.c -I /usr/local/include/freetype2 -lfreetype -lm
./example1 ./simsun.ttc abc
参考资料:
FreeType 字体引擎分析与指南
http://wenku.baidu.com/view/2d24be10cc7931b765ce155b.html
HZK16应用示例
http://wenku.baidu.com/view/0774d20c52ea551810a68768.html
点阵字库HZK12 HZK16 HZK24 ASC12 ASC16 简介 及 使用方法
http://blog.youkuaiyun.com/hongjiujing/article/details/6649618
汉字拼音、五笔、GB2312、GBK、Unicode、BIG5编码速查
http://ipseeker.cn/tools/pywb.php
在线汉字编码查询,一次查询多个汉字输入法编码及内码——快典网.htm
http://bm.kdd.cc/
BIG5编码表
http://wenku.baidu.com/view/9bb3ae01b52acfc789ebc970.html
UNICODE编码表
http://wenku.baidu.com/view/7c667f563c1ec5da50e27069.html
GB2312简体中文编码表
http://wenku.baidu.com/view/0ef57bfb04a1b0717fd5dd1a.html
hzk16的介绍以及简单的使用方法
http://hi.baidu.com/hrman/blog/item/4616bc2675ce13128a82a193.html