数码相框-font字体模块
字符编码及字体显示
在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字体模块相关推荐
- CSS文字文本样式(font字体、css外观属性)
1. font字体 1.1. font-size:大小 作用:font-size属性用于设置字号. p { font-size:20px; } 单位: 可以使用相对长度单位,也可以使用绝对长度单位. ...
- PCB genesis自制孔点 Font字体实现方法
一.先看genesis原有Font字体 在PCB工程CAM加孔点字体要求时,通常我们直接用Geneis软件给我们提供了2种孔点字体canned_57与canned_67,但此字体可能不能满足各个工厂个 ...
- 解决firefox和IE9对icon font字体的跨域访问问题
解决firefox和IE9对icon font字体的跨域访问问题 参考文章: (1)解决firefox和IE9对icon font字体的跨域访问问题 (2)https://www.cnblogs.co ...
- css的font修改颜色,css的font字体颜色如何设置
css的font字体颜色设置方法:1.直接在标签上使用"color:颜色"设置字体颜色:2.通过给font标签添加class属性,在css标签中通过该class设置字体颜色. 本教 ...
- Unity 制作font字体
有很多网友介绍Unity 创建并使用font的方法,这里总结一下备忘,同时网友的部分文章有一些小坑被我踩到,在这里记录一下,希望能帮助其他同学 一.首先创建字体(ttf文件),网上有用BitMap工具 ...
- 【CSS】CSS 文本样式 ② ( font 字体设置 | CSS 2.0手册使用 | font-weight 字体粗细设置 | font-style 字体斜体设置 | font 字体样式综合写法 )
文章目录 一. CSS 2.0手册使用 1. 按照文档层次查找 2. 搜索关键字查找文档 二. font-weight 字体粗细设置 1. 语法简介 2. 代码示例 三. font-style 字体斜 ...
- 单行文本垂直居中和多行文本垂直居中以及font字体
单行文本垂直居中 <style>*{margin: 0;padding: 0;}.box{width: 300px;margin: 20px auto 0;border: 1px soli ...
- CSS font 字体设置
取消标签加粗效果 font-weight:normal; 居中 text-align:center; 按照盒子模型,居中 text-align:center; display:block; 取消斜体 ...
- svg转css font,svg转font字体方案
在我们做项目的时候,通常会有一些icon图标,如下图: 这些图标,如果不跟设计师说,设计师会给png图.但是视觉规范里面,一般都会对这些图标加一些hover,active态,还会改变大小.如下图: 所 ...
最新文章
- 中移动完成透镜天线远距覆盖和降本增效试点
- 适用于Java开发人员的Elasticsearch:Elasticsearch生态系统
- 经验 | 一目了然,用动图展示 10 大 Git 命令
- (48)FPGA面试技能提升篇(数字采样、射频存储、频谱搬移)
- 解读Depth Map Prediction from a Single Image using a Multi-Scale Deep Network (2)
- OpenGL编程指南(第8版)PDF
- 查看变量数据类型的python内置函数_查看变量类型的Python内置函数是
- 清除手机图案解锁(执行adb命令工具类)
- 在线分析仪器(四)在线气体分析成套系统简述
- 怎样将计算机和电视机连接网络连接,电脑怎么连接电视 电脑和电视连接方法图文教程...
- 高通Spectra 2xx中GTM LTM的tuning重点
- 贵州大学2021计算机分数线,贵州大学录取分数线2021是多少分(附历年录取分数线)...
- Keystone 组件
- Java 百度地图 根据名称获取坐标(经纬度)
- 0ra-12170 tns 连接超时
- 英特尔快速启动技术如何安装
- python人狗大战游戏_python面向对象-----组合的题目 定一个人狗大战 并且用面向对象的组合知识...
- OJ积分系统(c++)
- [BZOJ1115]石子游戏Kam
- 施乐服务器显示exited,富士施乐故障维修代码.docx
热门文章
- python3:设计一个动物声音“模拟器”,希望模拟器可以模拟许多动物的叫声
- 使用xmake配合arm-none-eabi-gcc构建stm32工程
- The Foundry NUKE 12 mac版(电影特效合成制作软件)
- lubuntu输入法设置_Ubuntu 18.04 16.04 设置输入法切换方法 中文输入法
- 一位上海疫情下的悲催女程序员!
- 手机安装pem_使用HTTP网址分发并安装iOS程序
- 天润融通网络电话配置手册
- unbuntu 中远程桌面连接 tab键不能用
- 蚂蚁金服新一代数据可视化引擎 G2
- html5之太阳地球月球,使用html5画出地球月球和太阳之间的环绕关系