• TouchGFX之字体缓存


    使用二进制字体需要将整个字体加载到存储器。 在某些情况下,如果字体很大,如大字号中文字体,则这样做可能不可取。

    字体缓存使应用能够从外部存储器只能加载显示字符串所需的字母。 这意味着整个字体无需保存到在可寻址闪存或RAM上,而是只需保存在更大的文件系统上。

    字体文件阅读器

    1. FileDataReader.hpp
    2. #ifndef FILEDATAREADER_HPP
    3. #define FILEDATAREADER_HPP
    4. #include
    5. #include
    6. using namespace touchgfx;
    7. class FileDataReader : public FontDataReader
    8. {
    9. public:
    10. virtual ~FileDataReader() { }
    11. virtual void open()
    12. {
    13. fp = fopen("generated/fonts/bin/Font_verdana_20_4bpp.bin", "rb");
    14. }
    15. virtual void close()
    16. {
    17. fclose(fp);
    18. }
    19. virtual void setPosition(uint32_t position)
    20. {
    21. fseek(fp, position, SEEK_SET);
    22. }
    23. virtual void readData(void* out, uint32_t numberOfBytes)
    24. {
    25. fread(out, numberOfBytes, 1, fp);
    26. }
    27. private:
    28. FILE* fp;
    29. };
    30. #endif // FRONTENDAPPLICATION_HPP

    创建FontCache、存储缓冲区和文件系统阅读器对象,然后安装CachedFont:

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. uint8_t fontdata[5120];
    9. FileDataReader reader;
    10. FontCache fontCache;
    11. CachedFont cachedFont; //Cached Font object
    12. LOCATION_PRAGMA_NOLOAD("TouchGFX_Cache")
    13. uint16_t Cache[1024 * 604] LOCATION_ATTRIBUTE_NOLOAD("TouchGFX_Cache");
    14. FrontendApplication::FrontendApplication(Model& m, FrontendHeap& heap)
    15. : FrontendApplicationBase(m, heap)
    16. {
    17. #ifdef SIMULATOR
    18. const uint32_t cacheSize = 0x300000; //3 MB, as example
    19. uint16_t* const cacheStartAddr = (uint16_t*)malloc(cacheSize);
    20. Bitmap::setCache(cacheStartAddr, cacheSize, 4);
    21. #else
    22. Bitmap::setCache(Cache, sizeof(Cache));
    23. #endif
    24. //setup the font cache with buffer and size; and file reader object
    25. fontCache.setMemory(fontdata, sizeof(fontdata));
    26. fontCache.setReader(&reader);
    27. TypedText text = TypedText(T___SINGLEUSE_2OJQ);
    28. fontCache.initializeCachedFont(text, &cachedFont);
    29. //replace the linked in font in TouchGFX with cachedFont
    30. TypedTextDatabase::setFont(Typography::DEFAULT, &cachedFont);
    31. Unicode::UnicodeChar* str = const_cast(text.getText());
    32. fontCache.cacheString(text, str);
    33. }

    运行模拟器

  • 相关阅读:
    【办公自动化】使用Python批量处理Excel文件并转为csv文件
    Linux总结 有这一篇就够(呕心狂敲37k字,只为博君一点赞)
    应用回归分析:泊松回归
    SpringBoot中如何集成Servlet呢?
    linux下kill某个用户所有进程
    UML之类图
    量表如何分析?
    qt -- QTabWidget 中支持拖拽TabBar项
    图书管理系统
    云积天赫AI全域营销系统,为品牌营销注入新活力
  • 原文地址:https://blog.csdn.net/lushoumin/article/details/133420929