TTF_OpenFont() 返回 NULL。

7
这是事实:我正在Ubuntu上使用Codeblocks。我已经成功安装了SDL和SDL_ttf,并且已经成功包含和链接它们。我想将文本渲染到字体FreeSerif的屏幕上。
这里有个问题:当程序运行到TTF_OpenFont("FreeSerif.ttf,20")这一行时,它会返回NULL,如果传递给TTF_RenderText_Solid函数,则会导致段错误。我已经将字体文件添加到项目中,但仍然不起作用。
以下是代码:
TTF_Init();
TTF_Font *font = TTF_OpenFont("FreeSerif.ttf",20); //This returns NULL 

if(!font){printf("Unable to open font");exit(1);} //The program exits here

我遇到了同样的问题,但我在MacOSX上使用Qt Creator。 - Martin Delille
3
你尝试过使用 TTF_GetError() 吗?它可能会对打开错误提供更多信息。 - Dmytro Sirenko
3个回答

11

我遇到了同样的问题,似乎是路径错误,TTF_GetError() 抛出了这个错误信息:

无法打开 Arial.ttf

你应该使用绝对路径来设置字体,而不是相对路径。 对于我来说,正确的路径是:

/Library/Fonts/Arial.ttf

而不是:

Arial.ttf


此外,它可以复制到可执行文件的当前目录中。 - Dmytro Sirenko
当然可以,但是根据代码块(我并不喜欢它,但这不是重点)的设置,可执行文件的目录可能很难确定,这就是为什么我认为绝对路径在诊断中可能会有所帮助。 - Thomas Ayoub

4

您必须指定完整路径名,或者确保文件在程序的当前目录中(这与可执行文件的目录不同)。因此,请改用以下内容:

TTF_Font *font = TTF_OpenFont("/path/to/FreeSerif.ttf",20);

3
// load font.ttf at size 20 into font

TTF_Font *font;

font=TTF_OpenFont("font.ttf", 20);

if(!font) {
    printf("TTF_OpenFont: %s\n", TTF_GetError());
   // handle error
}

font.ttf路径未找到,返回NULL值。

if(!font)没有检查空值并且调用了TTF_GetError(),它将返回最后一个错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接