在 Haskell 中光栅化 TrueType 字体

jsk*_*jsk 5 rendering haskell bitmap truetype rasterizing

我想构建一个函数,该函数采用给定的 Unicode 字符和给定的 TrueType 字体,并将相应的字形光栅化为二维 1 位/像素位图。

类似的东西:

rasterize :: Font -> Char -> Size -> Bitmap
rasterize font char size = ...
Run Code Online (Sandbox Code Playgroud)

要求

rasterize功能应该:

  • 产生最大宽度w和高度的位图h,使得w <= sizeh <= size
  • 光栅化字形,使其完全填充位图,不留任何填充。

Bitmap类型应支持以下操作(或类似操作):

width  :: Bitmap -> Int
height :: Bitmap -> Int
bit    :: Bitmap -> (Int, Int) -> Bool
Run Code Online (Sandbox Code Playgroud)

wherebit b (x, y)应该评估True是否(且仅当)b索引位置的Bitmap中的位(x, y)被设置。

是否有任何 Haskell 库已经可以做到这一点,或类似的东西?

例子

评估表达式rasterize fontUtopiaStandard 'o' 64将产生一个位图b,如果渲染它看起来类似于下图(以 800% 比例查看,带网格),其中(width b, height b) = (60, 64)

在此处输入图片说明

笔记

  1. 我已经尝试过使用stb-truetype 包,但是任何获取像素数据的尝试似乎都会导致分段错误,即使在使用与测试包的版本类似的 GHC (6.12) 版本进行编译时也是如此。(如果有人感兴趣,我可以提供段错误代码的更多详细信息。)
  2. 我知道存在在 OpenGL 上下文中呈现 TrueType 字体的库,但我看不到如何访问像素数据。