超级好用的C++实用库之点阵字体(c语言点阵显示名字)
haoteby 2025-03-30 16:36 12 浏览
需要该C++实用库源码的大佬们,可搜索微信公众号“希望睿智”。添加关注后,输入消息“超级好用的C++实用库”,即可获得源码的下载链接。
概述
点阵字体是一种数字字体,其中每个字符都由一定尺寸的像素矩阵组成。比如:一个16×16点阵字体意味着每个字符是16列乘以16行的点阵构成的,每个点可以是开(黑色、实心)或关(白色、空白),通过组合这些点来模拟字符的形状和轮廓。
在计算机显示、打印和其他数字化输出设备中,点阵字体由于其简单性而得到广泛应用,特别是在早期的计算机系统、打印机以及低分辨率显示屏上。点阵字体的一个显著特点是:它们不需要任何矢量渲染引擎就可以直接输出,因为每个字符都已经预定义为静态的像素图案。现代应用中,尽管高分辨率显示器和高质量矢量字体已经成为主流,但点阵字体仍然在一些特定场合中有其独特价值,比如:游戏开发、嵌入式系统、工业打标、OSD字符叠加等。
CHP_LatticeFont类
在音视频开发领域,一般需要在视频上叠加各种文字信息。在嵌入式系统中,Flash空间和内存空间都非常有限,通常使用点阵字体来进行字符叠加。点阵字体文件通常分为两种:ascii字体文件和汉字字体文件。我们可以根据需要,将字体用白色或黑色来输出和渲染。但如果视频区域也是白色或黑色,则会与叠加的文字信息的颜色混在一起,导致看不清楚文字信息。
为了区分视频区域和叠加的文字信息,我们通常会使用描边的点阵字体。所谓描边的点阵字体,就是在白色或黑色的字体周围,再添加一圈黑色或白色的描边。为了方便应用层使用描边字体,我们封装了CHP_LatticeFont类。CHP_LatticeFont类的头文件,可参考下面的示例代码。
#pragma once
#include
#include "HP_Mutex.h"
class CHP_LatticeFont
{
public:
static void Open();
static CHP_LatticeFont *&Singleton();
static void Close();
int Init(const char *pszAsc16File, const char *pszHz16File, const char *pszAsc16StrokeFile = NULL, const char *pszHz16StrokeFile = NULL);
void DeInit();
int GetCode(const char *pszText, char *pCode, int &nTotalCodeLen, bool bUseStrokeFont = false);
static int GetMaxCodeLen(const char *pszText, bool bUseStrokeFont = false);
static int CorrectHalfChinese(char *pBuf, int nBufLen);
protected:
CHP_LatticeFont();
~CHP_LatticeFont();
private:
static int Init(const char *pszAsc16File, const char *pszHz16File, FILE *&pfAsc16, FILE *&pfHz16);
static int ReadAsc16(FILE *pFile, unsigned char ucChar, char *pBuf);
static int ReadHz16(FILE *pFile, unsigned char ucHigh, unsigned char ucLow, char *pBuf);
static int ReadAsc32(FILE *pFile, unsigned char ucChar, char *pBuf);
static int ReadHz32(FILE *pFile, unsigned char ucHigh, unsigned char ucLow, char *pBuf);
static void Transform(char *pCodeChar, bool bUseStrokeFont);
private:
static CHP_LatticeFont *m_pThis;
FILE *m_pfAsc16;
FILE *m_pfHz16;
FILE *m_pfAsc16Stroke;
FILE *m_pfHz16Stroke;
CHP_Mutex m_mutex;
};
可以看到,CHP_LatticeFont类是一个单实例类。为了使用CHP_LatticeFont类,我们需要先制作ascii字体文件和汉字字体文件。如果需要描边的点阵字体,还需要制作带描边的ascii字体文件和带描边的汉字字体文件。关于点阵字体文件的具体制作,可以使用GuiTool或HZKCreator等工具,这里就不再赘述了。
下面,我们将介绍CHP_LatticeFont类导出的公共接口。
Init:初始化点阵字体。参数pszAsc16File为ascii字体文件,参数pszHz16File为汉字字体文件;参数pszAsc16StrokeFile为带描边的ascii字体文件,参数pszHz16StrokeFile为带描边的汉字字体文件。返回值为0表示成功,其他为错误码,必须至少有一组字体文件解析成功,该接口才会返回成功。
DeInit:反初始化点阵字体,释放相关资源。
GetCode:获取字符串文本的点阵字体的编码。参数pszText为字符串文本,参数pCode为编码buffer,参数nTotalCodeLen传入时为编码buffer的总长度,传出时为编码buffer的实际长度,参数bUseStrokeFont表示是否使用描边字体。返回值为0表示成功,其他为错误码。
GetMaxCodeLen:获取字符串文本的点阵字体编码的最大长度,一般用于预先分配编码buffer内存时,获取编码buffer的长度。参数pszText为字符串文本,参数bUseStrokeFont表示是否使用描边字体,返回值为点阵字体编码的最大长度。
CorrectHalfChinese:校正半个汉字。当字符串文本宽度超过图像或视频宽度时,会对字符串文本进行截断。截断可能恰好发生在一个汉字的中间,此时,需要进行校正,把前半个汉字置为空字符。参数pBuf为文本buffer(不包括结尾的\0),参数nBufLen为文本buffer的长度。返回值为0表示成功,其他为错误码。
总结
在点阵字体中,每一个字符都以固定大小的位图图像来存储。这意味着,字符不能自由缩放而保持清晰度。因为当放大时,单个像素会被放大显示成多个像素,导致锯齿状边缘和模糊效果。相反,缩小点阵字体可能导致字符难以辨认或丢失细节。
点阵字体的优势在于:它们易于硬件直接渲染,并且对于资源有限的系统(比如:早期个人计算机、嵌入式系统)来说,由于不需要复杂的矢量渲染引擎,特别高效。
需要该C++实用库源码的大佬们,可搜索微信公众号“希望睿智”。添加关注后,输入消息“超级好用的C++实用库”,即可获得源码的下载链接。
相关推荐
- Python爬虫进阶教程(二):线程、协程
-
简介线程线程也叫轻量级进程,它是一个基本的CPU执行单元,也是程序执行过程中的最小单元,由线程ID、程序计数器、寄存器集合和堆栈共同组成。线程的引入减小了程序并发执行时的开销,提高了操作系统的并发性能...
- A320-V2500发动机系统FADEC介绍(2)
-
目的全权数字发动机控制(FADEC)系统在所有飞行和运行阶段提供全范围发动机控制。...
- 三国志战棋版:玩家“二叔”用这套群DOT在比武中拿下31胜5负
-
声明:本文首发于今日头条,而后发布于“鼎叔闯三棋”的微信公众号、抖音、哔哩哔哩和小红书平台,如果在其他平台就是抄袭。...
- 真正的独一无二:Dot One 推出 DNA 定制系列 139英镑起
-
相信很多人在挑选衣物时有着这样的困扰,综合了性价比、面料等因素后好不容易找到了心仪的款式,还要担心是否会撞衫,不管是擦肩而过的陌生人还是身边的熟人,都令人尴尬。小部分人为此热衷于购买少量的古着或者限量...
- 崩铁:周年庆福利再升级,老角色加强时间确定,3.xdot体系反转
-
#埃安UT大一圈高级很多#...
- Dotgo推出RBMHub,扩大了CPaaS提供商的覆盖范围和功能
-
据telecompaper网7月15日报道,用于商业消息传递的RichCommunicationServices(RCS)解决方案的领先提供商Dotgo宣布推出RBMHub。RBMHub的推出扩大了C...
- 深度解析:快照取消Dot职业的将何去何从
-
写在前面曾几何时,术士的出现便被冠以dot大师的名头,从远古时期的献祭腐蚀虹吸不如暗牧一个痛,到TBC上满dot=荣誉击杀+1,到wlk接近全暴击的冰晶腐蚀,再到CTM就算了吧MOP的各种变态吸x放...
- 星穹铁道:抽卡芙卡之前,你必须了解什么是dot!
-
卡妈终于上线了,可还是有很多人不明白什么是dot伤害,抽了卡妈直接玩起了直伤流,把一个持续伤害的引爆器玩成了打手,卡妈打dot伤害是远高于直伤的,有了卡妈的玩家一直了解dot,不然这卡妈就真被玩成四不...
- 游戏界的闪耀星辰陨落:悼念知名游戏博主″dotα牛娃″
-
无尽哀思!在数字时代浪潮中,游戏不仅是消遣娱乐的代名词,更是连接心灵的桥梁,构筑了无数人的青春回忆。在这片浩瀚无垠的游戏宇宙中,有这样一位博主,他以独特的风采、深邃的洞察力和无尽的热情,成为了玩家心中...
- 直击2017新加坡同性恋聚会Pink Dot,自由爱!
-
今年的“粉红点”又来啦~这个支持LGBT群体(男女同志、双性恋、跨性别等)群体的活动,从2009年起,已经在新加坡举办8年了!”这个非营利的同性恋权益活动,主要是希望大家了解到,不管一个人的性倾向或...
- python-dotenv,一款超级实用处理环境变量python库
-
python-dotenv,一款超级实用处理环境变量python库python-dotenv概述:...
- 亚马逊语音助手毫无征兆发笑 诡异至极吓坏用户
-
来源:新华网美国电商亚马逊7日承诺,将更改名下“亚历克萨”语音系统设置,令它不会莫名发笑,免得吓坏用户。“亚历克萨”是亚马逊开发的语音助手软件,可服从用户语音指令完成对话、播放音乐等任务。依照原来设计...
- 2022最火英文网名男女生
-
精选好听英文昵称带翻译1.moveon(离开)2.Monster(怪物)3.Solo吉他手4.Finish.(散场)...
- 智能家具 RecycleDot 的出现给传统家具厂商带来新的挑战
-
从可穿戴手环、手表到智能衣服,智能硬件逐步渗透到每一个领域。最近有一对父子MikeSandru和JohnSandru在自家的车库中设计了一款智能家具RecycleDot,给日渐萧条的家具行...
- 欧洲通信卫星公司 OneWeb 敦促印度DoT尽早批准提供卫星宽带服务
-
据telecomtalk2月17日报道,欧洲通信卫星公司EutelsatOneWeb近日敦促印度电信部(DoT)尽快批准其在印度部署双地球站网关的计划,以便连接其近地轨道(LEO)全球卫星星座,并...