一、touchGFX工程搭建


二、bin文件字体生成

参考这一篇文件
将生成的文件拷贝到sd卡

三、touchGFX源码修改

1、新建两个文件

FontReader.hpp和FontReader.cpp

FontReader.hpp

/** Copyright (c) 2006-2021, RT-Thread Development Team** SPDX-License-Identifier: Apache-2.0** Change Logs:* Date           Author       Notes* 2022-10-17     01417804       the first version*/
#ifndef _FONTREADER_HPP_
#define _FONTREADER_HPP_#include <fonts/FontCache.hpp>
#include <unistd.h>
#include <fcntl.h>
#include "ff.h"
#include "stdio.h"using namespace touchgfx;class FontReader :public FontDataReader
{public:FontReader();~FontReader();virtual void open();virtual void close();virtual void setPosition(uint32_t position);virtual void readData(void* out, uint32_t numberOfBytes);private:FILE* fp;
};#endif /* LIBRARIES_TOUCHGFX_LIB_TOUCHGFX_GUI_INCLUDE_GUI_COMMON_FONTREADER_HPP_ */

FontReader.cpp

/** Copyright (c) 2006-2021, RT-Thread Development Team** SPDX-License-Identifier: Apache-2.0** Change Logs:* Date           Author       Notes* 2022-10-17     01417804       the first version*/#include <gui/common/FontReader.hpp>int fd;
extern "C" void open_file()
{fd = open("/sdcard/touchgfx/font.bin", O_RDONLY);if(fd<0)rt_kprintf("open failed!\r\n");else {rt_kprintf("open success!\r\n");}
}
extern "C" void close_file()
{close(fd);
}FontReader::FontReader()
{}
FontReader::~FontReader()
{}void FontReader::open()
{open_file();
}
void FontReader::close()
{close_file();
}
void FontReader::setPosition(uint32_t position)
{rt_kprintf("lseek:%ld!\r\n",lseek(fd, position, SEEK_SET));
}
void FontReader::readData(void* out, uint32_t numberOfBytes)
{read(fd, out,numberOfBytes);rt_kprintf("read:%d!\r\n",numberOfBytes);
}

这两个函数是将open和close封装了一下

extern "C" void open_file()
extern "C" void close_file()

FontDataReader类中下面四个函数为纯虚函数,所以子函数必须要实现

    virtual void open() = 0;virtual void close() = 0;virtual void setPosition(uint32_t position) = 0;virtual void readData(void* out, uint32_t numberOfBytes) = 0;

2、Screen1View.hpp文件修改

#ifndef SCREEN1VIEW_HPP
#define SCREEN1VIEW_HPP#include <gui_generated/screen1_screen/Screen1ViewBase.hpp>
#include <gui/screen1_screen/Screen1Presenter.hpp>
#include <touchgfx/Font.hpp>
#include <fonts/GeneratedFont.hpp>
#include <touchgfx/Font.hpp>
#include <fonts/ApplicationFontProvider.hpp>
#include <texts/TypedTextDatabase.hpp>
#include <fonts/CachedFont.hpp>
#include <texts/TextKeysAndLanguages.hpp>#include <gui/common/FontReader.hpp>using namespace touchgfx;class Screen1View : public Screen1ViewBase
{public:Screen1View();virtual ~Screen1View() {}virtual void setupScreen();virtual void tearDownScreen();void cache_font();
protected:uint8_t fontData[5120]; //字符缓存区,缓存12个字符FontCache fontCache;CachedFont cacheFont;FontReader fontReader;
};#endif // SCREEN1VIEW_HPP

添加相关头文件和定义相关变量

3、Screen1View.cpp文件修改

#include <gui/screen1_screen/Screen1View.hpp>//0x4e00-0x9fa5,0x0000-0x007fScreen1View::Screen1View()
{}void Screen1View::setupScreen()
{Screen1ViewBase::setupScreen();this->cache_font();//显示字符串Unicode::snprintf(this->textArea1Buffer,this->TEXTAREA1_SIZE,"%s","e");this->textArea1.resizeToCurrentText();this->textArea1.invalidate();}void Screen1View::tearDownScreen()
{Screen1ViewBase::tearDownScreen();
}
void Screen1View::cache_font()
{fontCache.setMemory(this->fontData,sizeof(this->fontData));fontCache.setReader(&this->fontReader);TypedText text = TypedText(T___SINGLEUSE_W0UD);this->fontCache.initializeCachedFont(text, &this->cacheFont);TypedTextDatabase::setFont(Typography::TEST,&this->cacheFont);//缓存字符数据//第一种方法//this->fontCache.cacheString(text, (Unicode::UnicodeChar*)"0123456789");//第二种方法Unicode::UnicodeChar* str = (Unicode::UnicodeChar*)this->textArea2.getTypedText().getText();fontCache.cacheString(text,str);}

cache_font()函数加载字符,将用到的字符加载到fontData数组中。
关于fontData[8192]大小的计算8192/20*40 = 10.24大概20个中文字符

    //显示字符串Unicode::snprintf(this->textArea1Buffer,this->TEXTAREA1_SIZE,"%s","e");this->textArea1.resizeToCurrentText();this->textArea1.invalidate();

此处显示的字符只能为cache_font()中加载的字符。

touchGFX综合学习六、touchGFX使用FontCache字体缓存功能实现直接从外部存储介质显示字符串相关推荐

  1. touchGFX综合学习五、touchGFX加载外部(SDCARD、SPI FLASH等)字体显示,包括中文

    一.touchGFX工程搭建 添加一个box和textArea控件 注意:textArea控件需要通配符,至于字体下面有简介 二.bin文件字体生成 1.新建字体 按如上图片新建一个字体,下面填写的0 ...

  2. Docker学习六:综合实践

    前言 本次学习来自于datawhale组队学习: 教程地址为: https://github.com/datawhalechina/team-learning-program/tree/master/ ...

  3. 【vivado学习六】 Vivado综合

    世界上一成不变的东西,只有"任何事物都是在不断变化的"这条真理. -- 斯里兰卡 [vivado学习六] Vivado综合 在 Flow Navigator 中点击设置, 然后选择 ...

  4. 前端学习六——html5+CSS3

    前端学习六--html5+CSS3 HTML5 H5新增语义标签 多媒体标签 audio音频标签 audio音频标签常见属性 音频标签语法 视频标签video 视频标签语法 H5新增input表单.表 ...

  5. HTML5+CSS3的学习(六)

    HTML5+CSS3的学习(六) 2018版李立超html+css基础 103集教程,哔哩哔哩链接:https://www.bilibili.com/video/BV1sW411T78k?spm_id ...

  6. C语言程序设计入门学习六步曲,六步带你入门C语言

    C语言是面向过程的,而C++是面向对象的 C和C++的区别:         C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理 ...

  7. Apollo代码学习(六)—模型预测控制(MPC)_follow轻尘的博客-CSDN博客_mpc代码

    Apollo代码学习(六)-模型预测控制(MPC)_follow轻尘的博客-CSDN博客_mpc代码

  8. 艾伟:C#多线程学习(六) 互斥对象

    本系列文章导航 C#多线程学习(一) 多线程的相关概念 C#多线程学习(二) 如何操纵一个线程 C#多线程学习(三) 生产者和消费者 C#多线程学习(四) 多线程的自动管理(线程池) C#多线程学习( ...

  9. 学习WPF——使用Font-Awesome图标字体

    学习WPF--使用Font-Awesome图标字体 原文:学习WPF--使用Font-Awesome图标字体 图标字体介绍 在介绍图标字体之前,不得不介绍图标格式ICON ICON是一种图标格式,我们 ...

最新文章

  1. CV00-01-开篇与环境搭建
  2. ‘vue-cli-service‘ 不是内部或外部命令,也不是可运行的程序
  3. php 文档标示规范,php标识
  4. 爬虫笔记12完结篇实例:股票
  5. JAVA 文件锁 FileLock
  6. 牛人iOS开发系列--音频播放、录音、视频播放、拍照、视频录制
  7. ubuntu vim8.0源码安装
  8. 基于IO流读取的 完成 用户登录,注册,修改,查看所有用户,删除功能
  9. 一套完整的用户增长系统架构
  10. 杭州某知名xxxx公司急招大量java以及大数据开发工程师
  11. 送书 | 数据分析如烹小鲜
  12. Safari技术预览版141来啦,增加了哪些新功能?
  13. SQL Server 2005利用分区对海量数据的处理
  14. mysql pxc搭建_MySQL(PXC)集群搭建
  15. MySQL中以日期为查询条件的方法
  16. 第七周-C语言 求方程的共轭复根
  17. 室内定位常用方法总结
  18. 1.1 异步复位的串联T触发器 ---- always中慎用 非阻塞
  19. 正版NOD32升级ID在线申请
  20. 怎么把html改成迅雷bt种子文件格式,BT种子怎么制作?教你如何制作BT种子

热门文章

  1. 正确姿势开发vue后台管理系统
  2. pbe服务器最新更新,英雄联盟PBE服务器安装指南 抢先体验新模式“云顶之弈”不用等...
  3. 1.angular html+css+js导航条点击样式修改,加跳转页面
  4. As time goes by
  5. 读论文《Efficient Estimation of Word Representations in Vector Space》
  6. 御龙在天手游服务器满怎么注册,御龙在天手游背包满了怎么办
  7. 9.3 a.m.小结
  8. PTA R7-6 新世界 (C语言) (5 分)
  9. 快门shutter网络电话的使用方法和资费——免费打电话
  10. centos离线安装Chrome浏览器