文章目录

  • 概述及理由
  • uincod点阵结构
    • 头结构
    • 相关搜索代码

概述及理由

嵌入式中我们经常用到点屏的操作,这就设计到点阵的问题,可以使用ANSI编码,进行点屏,现在讲点unicode的点阵

  1. 全世界的unicode的编码是唯一的。
  2. 每个unicode编码占用两个字节
  3. 每一个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的点阵字库结构设计相关推荐

  1. 高通针对LED应用的点阵字库解决方案 — 支持多种字号字体显示

    高通led字库方案为led显示屏提供标准,专业字库.应用于各类LED屏,包括公交车显示牌,广告牌,停车场系统,排队机显示屏等等.高通字库芯片为这些提供了专业,丰富的字库,LED显示不再有错字.漏字.字 ...

  2. 读hzk32_点阵字库HZK12 HZK16 HZK24 ASC12 ASC16 简介 及 使用方法[附源码]

    如何在嵌入式系统中使用大量的汉字和字符呢? DOS前辈们经过艰辛的努力,将制作好的字模放到了一个个标准的库中以免去后辈的麻烦,这就是点阵字库文件. 一般我们使用16*16的点阵宋体字库,所谓16*16 ...

  3. ARM实验板移植,linux点阵字库的使用

    不说原理,只讲步骤.包括所有自用包以及实验中遇到问题的解决办法. 想知道HZK16原理的直接搜关键词:HZK16汉字16*16点阵字库的使用 XMware:(14条消息) 小白如何在window电脑上 ...

  4. 16 16点阵c语言程序,用C语言编程16点阵字库

    用C语言编程16点阵字库 2007-07-31 12:28 #include #include #include #include #include #include #include #define ...

  5. 点阵字库HZK12 HZK16 HZK24 ASC12 ASC16 简介 及 使用方法[附源码]

    字库点阵格式定义 ASC12  ' 8x12 ASCII点阵 一个字符12Byte ASC16  ' 8x16 ASCII点阵 一个字符16Byte ASC48  '24x48 ASCII点阵 一个字 ...

  6. 点阵字库生成器破解版下载地址

    本工具可以生成/编辑任意大小的点阵字库.源字体取自于Windows的TTF字体,可添加生僻汉字,嵌入式小系统开发必备软件. 华为网盘统一提取密码为52coder 下载地址:http://s.dbank ...

  7. 点阵字库显示系列之二:GB2312点阵字库显示

    免责声明:         本文是作者在研究过程中的一篇文章,本着互联网共享.自由(free,应该不是"免费")之精神发布于此.作者才疏学浅,孤陋寡闻,能力有限,对文中出现的术语及 ...

  8. 点阵字库二进制文件修改方案

    前言:此文章针对完整unicode码点阵字库(其他字库计算方法不同) 解决问题:部分点阵字库,不符业务需求,需要重新更改(并不是改动整个字库) 说明:此文中使用的两个软件,后面有提供下载链接! 步骤: ...

  9. 【综合】发帖顶你--汉字点阵字库操作

    [综合]发帖顶你–汉字点阵字库操作 其实到不是我不想写后面几道题,主要是确实没啥好写的,就真的只是体量大而已,就不写思路了,按照题目的意思模拟就行 代码 #include <stdio.h> ...

  10. 点阵字库放大算法(中文和英文)

    因摄像头高标清切换业务需求,需要切换不同大小的字体: 基本原理是把点阵字库的点进行扩展,放大两倍就是一个点变4个点:我这里用的基础字库是16x16的点阵,ASC是8x16的 Talk is cheap ...

最新文章

  1. aws ec2使用ses邮件服务的坑
  2. ilpimage to bitmap
  3. 一步一步理解GB、GBDT、xgboost
  4. eclipse占用内存过大_Java性能调优学习(三)-jmap+mat分析内存溢出问题实战
  5. 【渝粤教育】国家开放大学2019年春季 2508学前儿童语言教育 参考试题
  6. c# 衍生类和基类的构造顺序
  7. 区块链中涉及到密码学的场景
  8. 纪念BLives 1.0版本发布
  9. python一行包含if else需要注意的点
  10. 操作系统—覆盖与交换
  11. autojs之七牛直播云
  12. 2022年认证杯SPSSPRO杯数学建模B题(第一阶段)唐宋诗的定量分析与比较研究求解全过程文档及程序
  13. 使用反射时出现java.lang.NoSuchMethodException
  14. Docker部署rabbitmq遇到的两个问题
  15. Chaya虚拟机学习 —— 启用Docker遇到的Bug
  16. mysql优化的魅力,从20s优化到500ms,仅需三招(荣耀典藏版)
  17. 嵌入式的应用领域有哪些呢?
  18. 山东双软认证需要什么条件
  19. css:层叠样式表(全)
  20. 数据结构-队列-“先进先出”的数据结构

热门文章

  1. 二维卷积与一维卷积区别
  2. MySQL 读写分离原理
  3. 利用Pano2VR在全景图中添加视频,音频,图片
  4. html转换为pdf c#,HTML转PDF(C# itextsharp)
  5. java使用xmlWorkerHelper将html转pdf
  6. 2020博客之星结束了,感谢这些小伙伴们为我投票|博客之星TOP20的几位大佬
  7. 举个栗子~Tableau 技巧(205 ):区域地图中呈现具体位置
  8. locust测试工具入门
  9. mysql修改唯一索引
  10. 怎么制作OC材质预设?