I've created a repository具有最基本的方法来重现我的问题。我使用Cmake进行构建,并将其设置为将freetype静态链接到我的可执行文件中。
FreeType是一个子模块,因此您可以使用以下方法一次将其全部克隆:
git clone --recurse-submodules https://github.com/jeffw387/freetype_minimum_test
或者,如果您只希望从git克隆freetype到externals目录中。
我目前正在Ubuntu上进行测试。
我可以初始化FreeType,使用字体创建面孔,并使用FT_LOAD_RENDER标志从字符代码加载字形,而不会出现错误。
然后,当我检查位图缓冲区时,每一行都将其初始化为零。我在VS Code中使用gdb来检查缓冲区,但在此之前,我还尝试逐行复制数据。
我正在测试的字体是我在网上找到的免费字体,但是我能够在Libre Office中对其进行测试,并且看起来工作正常。
有人可以发现代码问题吗?如果有人愿意,我很想知道这个仓库是否在他们的机器上造成了同样的问题。
这是我的cpp文件,方便查看:
#include <ft2build.h>
#include FT_FREETYPE_H
#include <iostream>
#include <vector>
int main() {
FT_Library library{};
if (FT_Init_FreeType(&library)) {
std::cout << "Error initializing FreeType.";
}
FT_Face face{};
auto faceResult = FT_New_Face(library, "Anke.ttf", 0, &face);
if (faceResult) {
std::cout << "Error creating face.";
}
if ((face->face_flags & FT_FACE_FLAG_SCALABLE) != FT_FACE_FLAG_SCALABLE) {
std::cout << "Error: font is not scalable.";
}
if (FT_Set_Pixel_Sizes(face, 0, 50)) {
std::cout << "Error setting font pixel size.";
}
if (FT_Load_Char(face, 'P', FT_LOAD_RENDER)) {
std::cout << "Error loading or rendering glyph.";
}
auto bmp = face->glyph->bitmap;
return 0;
}
答案 0 :(得分:0)
我做了一些进一步的测试,看来我的freetype fork有问题。我还没有弄清楚它是什么的麻烦,但是无论如何,现在无论如何,我都尝试过使用https://github.com/aseprite/freetype2的新克隆进行尝试。