Растровые изображения FreeType обнуляются после рендеринга глифа - PullRequest
0 голосов
/ 14 ноября 2018

Я создал хранилище , в котором есть самый простой способ воспроизвести мою проблему.Я использую 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;
}

1 Ответ

0 голосов
/ 16 ноября 2018

Я провел дальнейшее тестирование, и, похоже, проблема с моей вилкой freetype. Я не пытался выяснить, что это было, но в любом случае теперь, когда я попробовал это со свежим клоном из https://github.com/aseprite/freetype2, это работает.

...