2.显示文字
2.1 文字编码方式 数字 代码什么 显示为什么 引入字符编码 使用不同的编码代码不同的文字
1.0 开始阶段 欧美人发明计算机 用一个字节表示 8位里面的低七位表示字母 0x61 A 0x41
2.0 字符编码阶段 中 D6D0 GBK 港澳台 繁体字 用什么表示哪一个文字 BIG5 BIG5编码表
3.0 全世界同一个 unicode 用什么数字 表示 字符/字
文件: abc ascii 61 62 63 9字节
4.0用什么方法既节省内存又能表示 UTF-8 UTF-16LE UTF-16BE
数字 代表 字 通过字符编码格
字符编码表通过什么存储 用UTF-8 UTF-LE
显示: 字体文件包含: 1.0编码表 2.字体数据 (宋体 新宋体)
写一个带有汉字的文件, 如何存储的
#include <stdio.h>
int main(int argc,char *argv)
{
int i =0;
unsigned char *str = "abc中";
while(str[i])
{
printf("%02x",str[i]);
i++;
}
printf("\n");
return 0;
}
保存为 ansi.c utf-8.c
同一段相同的代码用不同的编码方式,会导致不同的结果
man gcc
编译程序要指定字符集
/charset
-finput-charset= charset 表示源文件的编码方式,默认以UTF-8来解析
-fexec-charset=charset 表示可执行程序的字以什么编码方式来表示,默认是UTF-8
ex: gcc -o a a.c //默认 UTF-8
gcc -fexec-charset=GBK -fexec-charset = UTF-8 -o uff-8 ansi.c
2.2英文字母,汉字的点阵显示
原理: 开发板 : cpu LCD控制器 SDRAM(framebuffer) 修改framebuffer 就可以显示
echo hello > /dev/tty1 在lcd 上可以显示 hello 说明内核中肯定有点阵文件 8x16像素 8x16bit
0x41 字母 A 找到字母A 的点阵
统计信息: fstat(hz_hzk16,&hzk_stat); //统计汉字库的信息
memset();
HZK16 的使用方法
测试:
1.0 配置、修改内核支持把lcd.c编译进去
cp /work/drivers/10th_lcd/lcd.c drivers/video
vi drives/Makefile
2.0 使用新内核启动
3.0 freetype 库 字体引擎与指南
点阵的形式描绘出各种字体文件 C盘里面 simsun.ttc 新宋 中 字形 glyph(关键点)
想象一个字体文件的显示过程
1.给定一个文字 ‘A’ 可以确定编码值
2.根据“编码值”从字体文件中找到 charmaps
3.设置字体大小
4.用某些函数把glyph的点缩放位
5.转换位图点阵
6.在lcd上显示出来
4.0代码的过程
详见使用指南
1.0初始化
2.0加载字体FACE FT_New_Face
3.0设置字体大小 FT_set_char_size FT_Set_Pixel_size
4.0加载编码值 glyph = FT_Get_Char_Size
FT_Load_Glyph()
根据编码值 取出
转换为位图 FT_Set_charmap
5.0 旋转
英文字母,汉字的显示
2.4 jpg 图片 压缩的图片 图片损失少
jpg 图片 得到RGB数据 存放到显存
显存里面存放的象树的RGB数据
把jpg图片解压出RGB的原始数据
如何解压 libjpeg工具 libjpeg-turbo
libjpeg-api libjpeg是使用c语言实现的读,写JPEG文件的库(使用libjpeg的应用程序是以“scanline”为单位进行图像处理的)
JPEG 压缩对象 解压对象
1.0 分配和初始化一个decompression对象
2.0提定源文件
3.0用jpeg read_header 获得jpg信息
4.0设置解压参数,比如放大 缩小
5.0启动解压 : jpeg_start_decompress
6.0循环调用jpeg_read_scanes
7.0jpeg_finish_decompress
8.0释放decompress结构体
libjpeg 是一个矩形 一行数据是一个 scanline 某个像素的值 含有component 3个component