学习数码相框1.2.0.0字符的编码方式_显示点阵文字_freetype_在PC上测试freetype

学习数码相框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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值