因摄像头高标清切换业务需求,需要切换不同大小的字体;

基本原理是把点阵字库的点进行扩展,放大两倍就是一个点变4个点;我这里用的基础字库是16x16的点阵,ASC是8x16的

Talk is cheap, show me the code.  话不多说,放码过来。

//放大两倍,一个点变两个点,中英文是一样的
static void _OSD_FontZoom2(uint8_t font8,uint8_t *data)
{  int m=0,n=0;uint8_t tmp[2];uint32_t tmpd = 0;memset(tmp,0,2); for(m=0;m<8;m++){if((font8>>m)&0x1){tmpd |= 0x3 << (m*2);}else{tmpd |= 0x0 << (m*2);}}tmp[0] = (tmpd >> 8)&0xff;tmp[1] = tmpd&0xff;memcpy(data,tmp,2);
}  
//放大3倍
static void _OSD_FontZoom3(uint8_t font8,uint8_t *data)
{int m=0,n=0;uint8_t tmp[3];uint32_t tmpd = 0;memset(tmp,0,3); for(m=0;m<8;m++){if((font8>>m)&0x1){tmpd |= 0x7 << (m*3);}else{tmpd |= 0x0 << (m*3);}}tmp[0] = (tmpd >> 16)&0xff;tmp[1] = (tmpd >> 8)&0xff;tmp[2] = tmpd&0xff;memcpy(data,tmp,3);
}
// ASC放大2倍,入参font16为基础字库点阵数据
static void _OSD_Asc16ToAsc32(uint8_t *font16,uint8_t *font32)
{  uint8_t zoomout[32][2];  //8*16一行8位1字节,扩大为2字节,16列扩大为32列uint8_t zoom[2];  int j=0,i=0;  for(;j<16;j++)  {  _OSD_FontZoom2(font16[j],zoom);memcpy(zoomout[i],zoom ,2); memcpy(zoomout[i+1],zoomout[i],2);  i += 2;  }  memcpy(font32,zoomout,64);
}
//汉字放大2倍
static void _OSD_HZ16ToHZ32(uint8_t *font16,uint8_t *font32)
{  uint8_t zoomout[32][4];  //16*16一行16位2字节,扩大为4字节,16列扩大为32列uint8_t zoom[2];  int j=0,i=0,n=0;  for(;j<32;j++)  {  n = j%2;  _OSD_FontZoom2(font16[j],zoom);  memcpy(zoomout[i]+n*2,zoom ,2);  if(n != 0)  {  memcpy(zoomout[i+1],zoomout[i],4);  i += 2;  }  }  memcpy(font32,zoomout,128);
}
//汉字放大3倍
static void _OSD_HZ16ToHZ48(uint8_t *font16,uint8_t *font48)
{  uint8_t zoomout[48][6];  uint8_t zoom[3];  int j=0,i=0,n=0;  for(;j<32;j++)  {   _OSD_FontZoom3(font16[j],zoom);n = j%2;memcpy(zoomout[i]+n*3,zoom ,3);if(n != 0) {memcpy(zoomout[i+1],zoomout[i],6);  memcpy(zoomout[i+2],zoomout[i],6); i += 3;}}  memcpy(font48,zoomout,288);
}

点阵字库放大算法(中文和英文)相关推荐

  1. esp32使用MicroPython驱动oled屏显示中文和英文

    文章目录 esp32使用MicroPython驱动oled屏显示中文和英文 介绍 安装 特点 开源 硬件连接 API 示例 显示英文字符 显示汉字 参考链接 esp32使用MicroPython驱动o ...

  2. JS-只能输入中文和英文

    <span style="font-family:KaiTi_GB2312;">转自:<a target=_blank href="http://www ...

  3. 自己收集整理的微软错误代码大全(中文和英文)

    自己收集整理的微软错误代码大全,分别为中文和英文部分,供广大软件开发人员共勉.                  微软错误代码 2.1  中文 0 操作成功完成. 1 功能错误. 2 系统找不到指定的 ...

  4. JS正则验证输入框姓名只能输入中文和英文

    js只包含中文和英文 name: [{required: true,message: '请输入姓名',trigger: 'blur'},{pattern: /^[a-zA-Z\u4e00-\u9fa5 ...

  5. 验证中文和英文姓名 正则表达式

    出处:https://blog.csdn.net/kekekeqi/article/details/80881718 参考上面链接文章,以访丢失,再次粘贴一次 ^([\u4e00-\u9fa5]{2, ...

  6. 【HTML】关于height值设置和显示不同的原因以及font-size对象为中文和英文的区别

    关于height值设置和显示不同的原因 height: 100px; CSS中把高度设置为100px,但是实际测量发现高度为125px 这个是因为:笔记本默认显示大小为125%,所以100的125%就 ...

  7. date日期格式中文和英文显示

    date日期格式中文和英文显示 ##背景 由于日志文件里面输出的日期格式是'24-Dec-2019'这样的,但是在写脚本获取日期的时候,一直显示 '24-12月-2019'这样的格式导致匹配不到相应日 ...

  8. python正则匹配空格+数字+空格_如何批量添加中文和英文数字之间的空格?用正则表达式吧...

    1.中文与英文数字混合使用,排版有规范 写作中,我们经常遇到以下中文与英文.数字混用的情况. 我自学python编程,是在xue.cn上进行的.时耗方面,基础功仅需50多小时,加上很多实战,包括初步运 ...

  9. 转 JS-只能输入中文和英文

    <span style="font-family:KaiTi_GB2312;">转自:<a target=_blank href="http://www ...

最新文章

  1. Ext.DomHelper类的使用示例(内容操作)
  2. TCP三次握手四次挥手 TCP/UDP区别
  3. linux系统下codeblocks控制台打印中文乱码
  4. 微软2022服务器,​微软公开地分享了即将发布的WindowsServer 2022的特性
  5. 29 FI配置-财务会计-外币评估-分配到评估范围和会计核算原则
  6. (ヒトコト)一个挺有趣的东西!作为一个动漫宅,游戏宅来说还是一个挺有趣的接口!banner上面就是...
  7. 企业以太坊联盟发布了愿景文件
  8. 第1章 程序设计和C语言
  9. JavaScript学习(八十六)—运算符知识点总结
  10. 08.存储Cinder→5.场景学习→08.Backup Volume→2.实操
  11. linux 源代码安装mysql5.5_linux下通过源码包安装MySql5.5
  12. nginx 配置参数说明
  13. 《游戏设计艺术(第2版)》——学习笔记(9)第9章 游戏为玩家而生
  14. bat脚本重启IIS中的网站
  15. 【学术】自然语言处理国内外著名会议、期刊
  16. 8位并行左移串行转换电路_单片机试题
  17. 93复原IP地址(递归回溯法)
  18. 11月更新!一口气上线20+新功能,3D架构拓扑图更具趣味性~
  19. SAP UI5 应用开发教程之八十二 - 采用 OPA5 开发支持页面跳转的 SAP UI5 集成测试用例试读版
  20. 2023第六届东北(沈阳)国际幼教产业及装备展览会

热门文章

  1. TopCoder提交测试
  2. 助眠好物排行榜,有了这些就不怕睡不着了
  3. 众昂矿业刘金海:我国萤石进出口现状解析
  4. 【CS-Notes】工欲善其事必先利其器(Code、Git、Docker、Linux)
  5. Liferay环境搭建、简单说明与相关资料
  6. FL Studio21中文版编曲音乐宿主软件
  7. c4droid的c语言输出随机颜色图像代码
  8. 利用红外发射遥控电器
  9. 计算机一级考试相关书,全国计算机一级考试考什么?怎么考?有书吗?
  10. 百家姓128进制数的乘法运算