【问题标题】:FreeType bitmaps are zeroed after rendering a glyphFreeType 位图在渲染字形后归零
【发布时间】: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;
}

【问题讨论】:

    标签: c++ git cmake freetype


    【解决方案1】:

    我做了一些进一步的测试,似乎我的 freetype fork 有问题。我没有费心去弄清楚它是什么,但无论如何,现在我已经用来自https://github.com/aseprite/freetype2 的新克隆尝试过它,它可以工作。

    【讨论】:

      猜你喜欢
      • 2019-05-20
      • 2019-04-15
      • 1970-01-01
      • 1970-01-01
      • 2021-09-23
      • 1970-01-01
      • 1970-01-01
      • 2018-03-04
      • 2011-12-08
      相关资源
      最近更新 更多