字符编码及字体显示
在lcd上显示文件
1.去文件获得“编码”(GBK,ASCII,UTF-8,UTF-16BE,UTF-16LE)
2.根据“编码”得到“字体数据(点阵)”(ASCII,GBK,freetype)
3.把点阵在lcd上显示

点阵的获取方式目前涉及三种:ASCII,GBK,freetype。
font模块的主要功能 :
  根据 “编码值” 获得 “字体点阵”

每种方式主要实现了 GetFontBitmap(编码值,FontBitMap)函数,通过编码值取到的点阵信息保存在FontBitMap结构体中。前两种字体的点阵大小是固定的,freetype的点阵是变化的,所以FontBitMap包含更多变量描述点阵信息。
font模块包含Fonts_manager.c,ascii.c,gbk.c,freetype.c,其中Fonts_manager.c通过链表管理这3种字体点阵的获得方式。每个字体文件向上注册FontOpr结构体,由Fonts_manager.c函数通过链表管理这些结构体。

typedef struct FontOpr {char *name;      /* 字体模块的名字 */int (*FontInit)(char *pcFontFile, unsigned int dwFontSize);  /* 字体模块的初始化函数 */int (*GetFontBitmap)(unsigned int dwCode, PT_FontBitMap ptFontBitMap); /* 根据编码值获得字符的位图 */void (*SetFontSize)(unsigned int dwFontSize); /* 设置字体尺寸(单位:象素) */struct FontOpr *ptNext;      /* 链表 */
}T_FontOpr, *PT_FontOpr;

其中,GetFontBitmap函数根据编码值获得字符的位图,存储在FontBitMap结构体中,该结构体能够描述所有的字体格式。其中,ascii点阵6x12,GBK点阵16x16,freetype的点阵是变化的,所以需要更多的变量来确定位置。

typedef struct FontBitMap {int iXLeft;  /* 位图左上角X座标 */int iYTop;   /* 位图左上角Y座标 */int iXMax;   /* 位图的最大X座标值 */int iYMax;   /* 位图的最大Y座标值 */int iBpp;    /* 位图中一个象素用多少位来表示 */int iPitch;  /* 对于单色位图, 两行象素之间的跨度, 即第N行、第N+1行象素数据之间的偏移值(一行的个数) */int iCurOriginX;  /* 位图的原点X座标(一般是左下角), 使用原点来确定相邻字符的位置(输入参数) */int iCurOriginY;  /* 位图的原点Y座标 */   int iNextOriginX; /* 下一个字符即右边字符的原点X座标(输出参数) */int iNextOriginY; /* 下一个字符即右边字符的原点Y座标 */unsigned char *pucBuffer;  /* 存有字符的位图数据 */
}T_FontBitMap, *PT_FontBitMap;

支持的字体格式包括:ascii字体,GBK字体和freetype字体。
Fonts_manager.c的操作函数包括:

int RegisterFontOpr(PT_FontOpr ptFontOpr)    //注册"字体模块", 所谓字体模块就是取出字符位图的方法
PT_FontOpr GetFontOpr(char *pcName) //根据名字取出指定的"字体模块"
void SetFontSize(unsigned int dwFontSize)   //设置字符的尺寸(单位:色素)
unsigned int GetFontSize(void)  //获得字符的尺寸(单位:色素)
int GetFontBitmap(unsigned int dwCode, PT_FontBitMap ptFontBitMap)  //获得字符的位图
int SetFontsDetail(char *pcFontsName, char *pcFontsFile, unsigned int dwFontSize)   //设置字体模块的信息,比如指定字库文件,指定字符尺寸
int FontsInit(void) //调用各个字体模块的初始化函数

根据名字取出指定的"字体模块"

PT_FontOpr GetFontOpr(char *pcName){PT_FontOpr ptTmp = g_ptFontOprHead; while (ptTmp){if (strcmp(ptTmp->name, pcName) == 0)return ptTmp;ptTmp = ptTmp->ptNext;}return NULL;
}

设置字体模块的信息,比如指定字库文件,指定字符尺寸

int SetFontsDetail(char *pcFontsName, char *pcFontsFile, unsigned int dwFontSize){int iError = 0;PT_FontOpr ptFontOpr;ptFontOpr = GetFontOpr(pcFontsName);if (NULL == ptFontOpr)return -1;g_dwFontSize = dwFontSize;iError = ptFontOpr->FontInit(pcFontsFile, dwFontSize);  return iError;
}

数码相框-font字体模块相关推荐

  1. CSS文字文本样式(font字体、css外观属性)

    1. font字体 1.1. font-size:大小 作用:font-size属性用于设置字号. p { font-size:20px; } 单位: 可以使用相对长度单位,也可以使用绝对长度单位. ...

  2. PCB genesis自制孔点 Font字体实现方法

    一.先看genesis原有Font字体 在PCB工程CAM加孔点字体要求时,通常我们直接用Geneis软件给我们提供了2种孔点字体canned_57与canned_67,但此字体可能不能满足各个工厂个 ...

  3. 解决firefox和IE9对icon font字体的跨域访问问题

    解决firefox和IE9对icon font字体的跨域访问问题 参考文章: (1)解决firefox和IE9对icon font字体的跨域访问问题 (2)https://www.cnblogs.co ...

  4. css的font修改颜色,css的font字体颜色如何设置

    css的font字体颜色设置方法:1.直接在标签上使用"color:颜色"设置字体颜色:2.通过给font标签添加class属性,在css标签中通过该class设置字体颜色. 本教 ...

  5. Unity 制作font字体

    有很多网友介绍Unity 创建并使用font的方法,这里总结一下备忘,同时网友的部分文章有一些小坑被我踩到,在这里记录一下,希望能帮助其他同学 一.首先创建字体(ttf文件),网上有用BitMap工具 ...

  6. 【CSS】CSS 文本样式 ② ( font 字体设置 | CSS 2.0手册使用 | font-weight 字体粗细设置 | font-style 字体斜体设置 | font 字体样式综合写法 )

    文章目录 一. CSS 2.0手册使用 1. 按照文档层次查找 2. 搜索关键字查找文档 二. font-weight 字体粗细设置 1. 语法简介 2. 代码示例 三. font-style 字体斜 ...

  7. 单行文本垂直居中和多行文本垂直居中以及font字体

    单行文本垂直居中 <style>*{margin: 0;padding: 0;}.box{width: 300px;margin: 20px auto 0;border: 1px soli ...

  8. CSS font 字体设置

    取消标签加粗效果 font-weight:normal; 居中 text-align:center; 按照盒子模型,居中 text-align:center; display:block; 取消斜体 ...

  9. svg转css font,svg转font字体方案

    在我们做项目的时候,通常会有一些icon图标,如下图: 这些图标,如果不跟设计师说,设计师会给png图.但是视觉规范里面,一般都会对这些图标加一些hover,active态,还会改变大小.如下图: 所 ...

最新文章

  1. 中移动完成透镜天线远距覆盖和降本增效试点
  2. 适用于Java开发人员的Elasticsearch:Elasticsearch生态系统
  3. 经验 | 一目了然,用动图展示 10 大 Git 命令
  4. (48)FPGA面试技能提升篇(数字采样、射频存储、频谱搬移)
  5. 解读Depth Map Prediction from a Single Image using a Multi-Scale Deep Network (2)
  6. OpenGL编程指南(第8版)PDF
  7. 查看变量数据类型的python内置函数_查看变量类型的Python内置函数是
  8. 清除手机图案解锁(执行adb命令工具类)
  9. 在线分析仪器(四)在线气体分析成套系统简述
  10. 怎样将计算机和电视机连接网络连接,电脑怎么连接电视 电脑和电视连接方法图文教程...
  11. 高通Spectra 2xx中GTM LTM的tuning重点
  12. 贵州大学2021计算机分数线,贵州大学录取分数线2021是多少分(附历年录取分数线)...
  13. Keystone 组件
  14. Java 百度地图 根据名称获取坐标(经纬度)
  15. 0ra-12170 tns 连接超时
  16. 英特尔快速启动技术如何安装
  17. python人狗大战游戏_python面向对象-----组合的题目 定一个人狗大战 并且用面向对象的组合知识...
  18. OJ积分系统(c++)
  19. [BZOJ1115]石子游戏Kam
  20. 施乐服务器显示exited,富士施乐故障维修代码.docx

热门文章

  1. python3:设计一个动物声音“模拟器”,希望模拟器可以模拟许多动物的叫声
  2. 使用xmake配合arm-none-eabi-gcc构建stm32工程
  3. The Foundry NUKE 12 mac版(电影特效合成制作软件)
  4. lubuntu输入法设置_Ubuntu 18.04 16.04 设置输入法切换方法 中文输入法
  5. 一位上海疫情下的悲催女程序员!
  6. 手机安装pem_使用HTTP网址分发并安装iOS程序
  7. 天润融通网络电话配置手册
  8. unbuntu 中远程桌面连接 tab键不能用
  9. 蚂蚁金服新一代数据可视化引擎 G2
  10. html5之太阳地球月球,使用html5画出地球月球和太阳之间的环绕关系