Pango に FreeType を制御させようとしています。FreeType をビットマップにレンダリングすることに成功しましたが、Pango は何が起こっているのかを認識していないようです。明らかに、何かを正しく行っていません。
これは私が現在使用しているコードです:
font_map = pango_ft2_font_map_new();
pango_ft2_font_map_set_resolution(PANGO_FT2_FONT_MAP(font_map), 72, 72);
cr = pango_font_map_create_context(PANGO_FONT_MAP(font_map));
font_description = pango_font_description_new ();
pango_font_description_set_family (font_description, "Courier New");
pango_font_description_set_weight (font_description, PANGO_WEIGHT_BOLD);
pango_font_description_set_absolute_size (font_description, 32 * PANGO_SCALE);
layout = pango_layout_new(cr);
pango_layout_set_font_description(layout, font_description);
pango_layout_set_text(layout, "Some sample text!", -1);
pango_context_set_font_description(cr, font_description);
FT_Bitmap bitmap = { 0 };
bitmap.width = drawBitmap.get()->getWidth();
bitmap.rows = drawBitmap.get()->getHeight();
bitmap.pitch = bitmap.width * 4;
bitmap.buffer = (unsigned char*)drawBitmap.get()->getDataPtr();
bitmap.num_grays = 256;
bitmap.pixel_mode = FT_PIXEL_MODE_GRAY;
pango_ft2_render_layout(&bitmap, layout, 100, 100);
drawBitmap
は単なるヘルパー クラスです。ランダムな色で塗りつぶして表示できるので、これが機能することはわかっています。
これがレンダリングされるものです:
そのテキストが正しく表示されるようにしたいと思います。
編集: 画像のビット深度を修正し、裸の Pango FreeType から FreeType エンジンを搭載した Pango Cairo に切り替えた後、問題はより明確になりました。
この行を使用して:
font_map = pango_cairo_font_map_new_for_font_type(CAIRO_FONT_TYPE_WIN32);
生産する
を実行するとpango_font_map_list_families
、システムにインストールされているフォントの長いリストが表示されます。
ただし、FreeType を使用するには、次のように変更します。
font_map = pango_cairo_font_map_new_for_font_type(CAIRO_FONT_TYPE_FT);
それが生み出す
Sans
すると突然、システムにSerif
との 3 つのフォントしかなくなりましたMonospace
。