Я создал хранилище , в котором есть самый простой способ воспроизвести мою проблему.Я использую Cmake для сборки, и он настроен для статической привязки freetype к моему исполняемому файлу.
FreeType - это подмодуль, так что вы можете клонировать все сразу с помощью:
git clone --recurse-submodules https://github.com/jeffw387/freetype_minimum_test
или, если вы предпочитаете просто клонировать freetype из git в каталог externals.
В настоящее время я тестирую Ubuntu.
Я могу инициализировать FreeType, создать лицо из шрифта изагрузить глиф из кода символа с флагом FT_LOAD_RENDER, все без ошибок.
Затем, когда я проверяю буфер растрового изображения, он инициализируется нулями в каждой строке.Я использовал gdb из VS Code для проверки буфера, но до этого я также пытался копировать данные построчно.
Шрифт, с которым я тестирую, является бесплатным шрифтом, который я нашел в Интернете, ноЯ смог протестировать его в 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;
}