【问题标题】:How to integrate (hardcode) a font file into my program?如何将字体文件集成(硬编码)到我的程序中?
【发布时间】:2013-07-01 14:18:29
【问题描述】:

我目前正在将我的图像作为结构硬编码到我的 C++ 程序中(可以使用 GIMP 创建带有像素数据的源代码),如下所示:

static const struct {
  unsigned int   width;
  unsigned int   height;
  unsigned int   bytes_per_pixel;
  unsigned char  pixel_data[16 * 16 * 4 + 1];
} my_icon = {
  16, 16, 4,
  "...", pixel data here
};

一切正常,我很高兴!但现在我想对我正在使用的字体文件做同样的事情。

由于 GIMP 为我进行了转换,但显然无法为我转换字体,我现在陷入困境,不知道如何像处理图像一样对 font.ttf 进行硬编码。

如果有任何相关性,这就是我当前加载字体文件的方式:

sf::Font font;
if (!font.loadFromFile("font.ttf")) {
    std::cout << "Could not load font" << std::endl;
    return -1;
}

有人可以帮我吗? (字体大小小于 25 KB,所以没有问题)

谢谢!!

【问题讨论】:

    标签: c++ fonts struct sfml hardcode


    【解决方案1】:

    It seem字体有一个很好的loadFromMemory方法。因此,您可以像之前的示例一样使用它,以字符串文字形式呈现数据并将其传递。

    编写一个将二进制文件转换为适合包含的\xHH hexdump-like格式的程序并不难。

    【讨论】:

    • 你能告诉我这是什么格式:“\307R\377\357\305W\377\3...” 我试过二进制到十六进制转换器和一个 hexdump 工具,如下所示: fileformat.info/tool/hexdump.htm 但不是上述格式。我不知道它是怎么称呼的。我疯狂地用谷歌搜索将字体转换为这种格式,但我找不到任何东西:(
    • 看起来这是一个指向字节序列 {0xC7,0x52,0xFF,0xEF,0xC5,0x57,0xFF,...} 的常量指针。后跟三个数字的反斜杠表示 octal 中的字节值;不是反斜杠、结束引号或问号的可打印字符表示其在目标字符集(通常为 ASCII)中的字符代码。
    • 命令行工具xxd用xxd -i &lt;filename&gt;将二进制文件转换为C格式的十六进制数组。
    • 谢谢大家。我用谷歌搜索了一下,找到了适用于 Windows 的工具 Bin2h。它运行良好!
    【解决方案2】:

    好的,这是我的解决方案:

    我使用工具 Bin2h (http://www.deadnode.org/sw/bin2h/) 创建了以下代码:

    unsigned int fontSize = 22256;
    unsigned char fontChar[] = {
    0x00,0x01,0x00,...
    };
    

    那我用

    font.loadFromMemory(fontChar, fontSize)
    

    加载字体。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      • 2014-08-21
      • 1970-01-01
      • 2011-06-12
      • 1970-01-01
      • 2014-01-25
      相关资源
      最近更新 更多