在JUCE中嵌入字体

joe*_*_04 13 fonts juce

我正在寻找一个简单的逐步解决方案,在JUCE中嵌入字体.

我在我的应用程序中嵌入字体时遇到了一些麻烦(完全忘了在应用程序发布之前把时间花在这上面,现在我的应用程序没有在用户系统上显示我的字体 - 这是可以理解的).

我已经搜索并关注了有关该主题的所有帖子,但我仍然遇到问题.我想将嵌入字体添加到我的应用程序中已存在的标签中,这些标签是我们创建的,并通过ProJucer GUI组件进行布局.

到目前为止我做了什么:

1)将字体添加到我的ProJucer会话中,以便将其添加到BinaryData

2)创建了一个名为"EmbeddedFont:"的类

#include "../JuceLibraryCode/JuceHeader.h"

class EmbeddedFonts
{
private:
    Font calistoMT;

public:
    EmbeddedFonts();
    Font& getCalistoMT();
};
Run Code Online (Sandbox Code Playgroud)

EmbeddedFonts::EmbeddedFonts()
{
    // in the line below is where I'm getting the assertion error: jassert (typefaceName.isNotEmpty());
    calistoMT = Font(Typeface::createSystemTypefaceFor(BinaryData::Calisto_MT,
                                                       BinaryData::Calisto_MTSize));
}

Font& EmbeddedFonts::getCalistoMT()
{
    return calistoMT;
}
Run Code Online (Sandbox Code Playgroud)

3)在我的GUI组件类的标题中创建了一个这样的实例4)尝试将此字体传递给标签字体:

genericLabelName->setFont(embeddedFont.getCalistoMT());
Run Code Online (Sandbox Code Playgroud)

不确定从这里做什么.此外,在我使嵌入字体工作后,我应该对projucer GUI组件中的字体字段做些什么?我应该把它设置为相同的字体吗?我只是问,因为我在技术上会在构造函数中设置两次字体(一次来自GUI Component选项下拉菜单,一次是手工编写嵌入字体).

我已经尝试了几天,但仍然遇到麻烦.谢谢你的帮助.这是我在发布下一个应用更新之前需要做的最后一件事,所以非常感谢任何帮助.

Kda*_*awg 1

由于看起来您在 JUCE 方面的操作正确,因此我相信您尝试加载的字体文件没有与之关联的名称。我会尝试以下操作:

  • Typeface在将调用返回的名称createSystemTypefaceFor传递给构造函数之前,请检查该名称Font。我相信它应该有一个getName()或类似的调用来获得它的名字。如果该名称为空(根据您的断言,我希望它是空的),那么您就有问题了。

  • 您可能想尝试下载 TTF 文件查看器,它可以为您提供有关您尝试加载的文件的一些信息。它还可以指示您正在阅读的字体是否包含名称。如果它的元数据中确实有名称,则可能表明 JUCE 库中存在错误。

  • 您可以尝试加载不同的字体或您知道在元数据中具有正确名称的不同字体(因为您已经使用某种查看器或工具进行了检查),并查看为它们创建的字体是否已设置名称,并且,如果是这样,请尝试Font从其中一种字体创建,看看是否成功。

如果加载的字体实际上确实设置了名称,那么这种理论就不再适用了,但我仍然会尝试第三步,看看是否每种字体都会出现此错误,或者是否仅限于一种字体。