一段使用 FreeType 在控制台打印字符的 C++ 代码

来源:互联网 发布:网络带来的弊端 编辑:程序博客网 时间:2024/05/22 12:47
#include <ft2build.h>#include FT_FREETYPE_H#include FT_GLYPH_H#include FT_BITMAP_H#include <iostream>int main(){    FT_Library library;    FT_Face face;    FT_Init_FreeType(&library);    FT_New_Face(library, "XXX.ttf", 0, &face);    FT_Select_Charmap(face, FT_ENCODING_UNICODE);    FT_Set_Char_Size(face, 0, 12 * 64, 96, 96);    FT_ULong charcode = 0x7F8E;    FT_UInt index = FT_Get_Char_Index(face, charcode);    FT_Load_Glyph(face, index, FT_LOAD_DEFAULT);    FT_Render_Glyph(face->glyph, FT_RENDER_MODE_MONO);    FT_Bitmap bitmap;    FT_Bitmap_New(&bitmap);    FT_Bitmap_Convert(library, &face->glyph->bitmap, &bitmap, 1);    for (int y = 0; y < bitmap.rows; y++)    {        for (int x = 0; x < bitmap.width; x++)        {            unsigned char c = bitmap.buffer[y * bitmap.width + x];            if (c)            {                std::cout << '@';            }            else            {                std::cout << ' ';            }        }        std::cout << '\n';    }    FT_Bitmap_Done(library, &bitmap);    FT_Done_Face(face);    FT_Done_FreeType(library);    return 0;}

FT_New_Face 函数用来读取某个字体文件

FT_ULong charcode 字符的 UTF-32 的编码,如 0x7F8E 是 U+7F8E 就是美丽的"美"字

FT_Render_Glyph(face->glyph, FT_RENDER_MODE_MONO); 渲染图片,FT_RENDER_MODE_MONO 是渲染只有黑白两色的位图。

FT_Bitmap_Convert 由于渲染模式的不同,分析起来比较麻烦,使用这个函数可以转换成统一的位深为 8bpp 的位图。

0 0
原创粉丝点击