【发布时间】:2018-11-14 01:49:26
【问题描述】:
I've created a repository 具有重现我的问题的最基本方法。我使用 Cmake 进行构建,它被设置为将 freetype 静态链接到我的可执行文件中。
FreeType 是一个子模块,因此您可以使用以下命令一次性克隆它:
git clone --recurse-submodules https://github.com/jeffw387/freetype_minimum_test
或者,如果您更喜欢将 freetype 从 git 克隆到 externals 目录中。
我目前正在 Ubuntu 上进行测试。
我可以初始化 FreeType,从字体创建面,并从带有 FT_LOAD_RENDER 标志的字符代码加载字形,所有这些都没有错误。
然后,当我检查位图缓冲区时,它在每一行上都初始化为零。我在 VS Code 中使用 gdb 来检查缓冲区,但在此之前我还尝试逐行复制数据。
我正在测试的字体是我在网上找到的免费字体,但我能够在 Libre Office 中对其进行测试,它似乎工作得很好。
谁能发现代码的问题?如果有人愿意,我很想知道这个 repo 是否会在他们的机器上产生同样的问题。
这是我的 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;
}
【问题讨论】: