发布时间:2025-12-10 11:21:56 浏览次数:3
参考这一篇文件
将生成的文件拷贝到sd卡
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;添加相关头文件和定义相关变量
cache_font()函数加载字符,将用到的字符加载到fontData数组中。
关于fontData[8192]大小的计算8192/20*40 = 10.24大概20个中文字符
此处显示的字符只能为cache_font()中加载的字符。