渲染字形后,将FreeType位图清零

时间:2018-11-14 01:49:27

标签: c++ git cmake freetype

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;
}

1 个答案:

答案 0 :(得分:0)

我做了一些进一步的测试,看来我的freetype fork有问题。我还没有弄清楚它是什么的麻烦,但是无论如何,现在无论如何,我都尝试过使用https://github.com/aseprite/freetype2的新克隆进行尝试。