裁剪的uincoide的点阵字库结构设计
文章目录
- 概述及理由
- uincod点阵结构
- 头结构
- 页
- 相关搜索代码
概述及理由
嵌入式中我们经常用到点屏的操作,这就设计到点阵的问题,可以使用ANSI编码,进行点屏,现在讲点unicode的点阵
- 全世界的unicode的编码是唯一的。
- 每个unicode编码占用两个字节
- 每一个unicode码的点阵,都占用一样的大小
如果需要支持全世界语言的, 那么我们可以生成一个点阵库。这个的点阵库的体积比较大,因为包括了所有的uincode的编码。但是有一个问题来了,如果嵌入式中没有足够的空间来保存uincode的点阵库,是不是就不能进行项目的操作了? 其实一个项目使用的范围,通常是在一个国家范围内,这样我们就可以通过裁剪点阵字库,实现我们的目的
uincod点阵结构
头结构
typedef struct
{char fontFormat[3]; // 字库格式uint8 swVersion; // 软件版本uint8 fontSize; // 字体大小uint8 charWidth; // 字符宽度uint8 charHeight; // 字符高度int8 offsetX; // X 偏移int8 offsetY; // Y 偏移uint8 bitsPerPixel; // 每像素位数uint16 bitsSizePerChar; // 每字符位图数据大小uint16 bitsOffs; // 字符位图数据偏移uint16 numPages; // 编码页数} Font_FileInfo_t; // 字库文件信息
前16个字对应的头文件信息
页
我们把66536 个uincode字库,分成了1024页,每个页中有8个字节,每一位代表了是否有点阵字库
#define Font_NumPages 1024
#define Font_PageSize (0x10000 / Font_NumPages)
页的结构
typedef struct
{uint16 charIndex; // 这一页之前可以显示的字符数uint8 codesMask[Font_PageSize / 8];// 每一位代表了是不否有点阵} __attribute__((packed)) Font_PageEntry_t;
相关搜索代码
/* 获取字符索引 */
int Font_GetCharIndex(sd_file_t* fontFile, uint16 unicode)
{Font_PageEntry_t pageEntry;uint16 m = unicode / Font_PageSize;
uint16 n = unicode % Font_PageSize;
uint16 i, j;sys_sd_fseek(fontFile, SEEK_SET, sizeof(Font_FileInfo_t) + m * sizeof(Font_PageEntry_t));sys_sd_fread(fontFile, &pageEntry, sizeof(Font_PageEntry_t));if (!(pageEntry.codesMask[n/8] & (1 << (n%8))))return -1;
for (i = j = 0; i < n; i++)
{if (pageEntry.codesMask[i/8] & (1 << (i%8)))j++;
}i = pageEntry.charIndex + j;return i;
}
/* 获取字符位图数据 */
int Font_GetCharBits(sd_file_t* fontFile, uint16 unicode, uint8* bitsBuf)
{Font_FileInfo_t* fileInfo = &Font_FileInfo;
int bpc = fileInfo->bitsSizePerChar;
int charIndex;
if (isspace(unicode))unicode = ' ';
if ((charIndex = Font_GetCharIndex(fontFile, unicode)) < 0){if ((charIndex = Font_GetCharIndex(fontFile, '?')) < 0)return -1;
}
sys_sd_fseek(fontFile, SEEK_SET, fileInfo->bitsOffs + charIndex * bpc)
sys_sd_fread(fontFile, bitsBuf, bpc);
return bpc;
}
裁剪的uincoide的点阵字库结构设计相关推荐
- 高通针对LED应用的点阵字库解决方案 — 支持多种字号字体显示
高通led字库方案为led显示屏提供标准,专业字库.应用于各类LED屏,包括公交车显示牌,广告牌,停车场系统,排队机显示屏等等.高通字库芯片为这些提供了专业,丰富的字库,LED显示不再有错字.漏字.字 ...
- 读hzk32_点阵字库HZK12 HZK16 HZK24 ASC12 ASC16 简介 及 使用方法[附源码]
如何在嵌入式系统中使用大量的汉字和字符呢? DOS前辈们经过艰辛的努力,将制作好的字模放到了一个个标准的库中以免去后辈的麻烦,这就是点阵字库文件. 一般我们使用16*16的点阵宋体字库,所谓16*16 ...
- ARM实验板移植,linux点阵字库的使用
不说原理,只讲步骤.包括所有自用包以及实验中遇到问题的解决办法. 想知道HZK16原理的直接搜关键词:HZK16汉字16*16点阵字库的使用 XMware:(14条消息) 小白如何在window电脑上 ...
- 16 16点阵c语言程序,用C语言编程16点阵字库
用C语言编程16点阵字库 2007-07-31 12:28 #include #include #include #include #include #include #include #define ...
- 点阵字库HZK12 HZK16 HZK24 ASC12 ASC16 简介 及 使用方法[附源码]
字库点阵格式定义 ASC12 ' 8x12 ASCII点阵 一个字符12Byte ASC16 ' 8x16 ASCII点阵 一个字符16Byte ASC48 '24x48 ASCII点阵 一个字 ...
- 点阵字库生成器破解版下载地址
本工具可以生成/编辑任意大小的点阵字库.源字体取自于Windows的TTF字体,可添加生僻汉字,嵌入式小系统开发必备软件. 华为网盘统一提取密码为52coder 下载地址:http://s.dbank ...
- 点阵字库显示系列之二:GB2312点阵字库显示
免责声明: 本文是作者在研究过程中的一篇文章,本着互联网共享.自由(free,应该不是"免费")之精神发布于此.作者才疏学浅,孤陋寡闻,能力有限,对文中出现的术语及 ...
- 点阵字库二进制文件修改方案
前言:此文章针对完整unicode码点阵字库(其他字库计算方法不同) 解决问题:部分点阵字库,不符业务需求,需要重新更改(并不是改动整个字库) 说明:此文中使用的两个软件,后面有提供下载链接! 步骤: ...
- 【综合】发帖顶你--汉字点阵字库操作
[综合]发帖顶你–汉字点阵字库操作 其实到不是我不想写后面几道题,主要是确实没啥好写的,就真的只是体量大而已,就不写思路了,按照题目的意思模拟就行 代码 #include <stdio.h> ...
- 点阵字库放大算法(中文和英文)
因摄像头高标清切换业务需求,需要切换不同大小的字体: 基本原理是把点阵字库的点进行扩展,放大两倍就是一个点变4个点:我这里用的基础字库是16x16的点阵,ASC是8x16的 Talk is cheap ...
最新文章
- aws ec2使用ses邮件服务的坑
- ilpimage to bitmap
- 一步一步理解GB、GBDT、xgboost
- eclipse占用内存过大_Java性能调优学习(三)-jmap+mat分析内存溢出问题实战
- 【渝粤教育】国家开放大学2019年春季 2508学前儿童语言教育 参考试题
- c# 衍生类和基类的构造顺序
- 区块链中涉及到密码学的场景
- 纪念BLives 1.0版本发布
- python一行包含if else需要注意的点
- 操作系统—覆盖与交换
- autojs之七牛直播云
- 2022年认证杯SPSSPRO杯数学建模B题(第一阶段)唐宋诗的定量分析与比较研究求解全过程文档及程序
- 使用反射时出现java.lang.NoSuchMethodException
- Docker部署rabbitmq遇到的两个问题
- Chaya虚拟机学习 —— 启用Docker遇到的Bug
- mysql优化的魅力,从20s优化到500ms,仅需三招(荣耀典藏版)
- 嵌入式的应用领域有哪些呢?
- 山东双软认证需要什么条件
- css:层叠样式表(全)
- 数据结构-队列-“先进先出”的数据结构