1

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

4

2 に答える 2

0

おそらくフォントファイルがどこにあるかを手動で伝える必要があります.freetypeだけではデフォルトのフォントの場所の概念がありません.ベアボーンレンダラーです(そして、Unicodeテキストを表示するには本当に不十分です.他のパンゴエンジンが他のライブラリをミックスに追加するのはそのためです).

pango-cairo は最も完全な pango バックエンド IIRC であり、私が間違っていない限り、fontconfig を取り込みます。fontconfig の唯一の目的は、アプリのフォント ファイルの場所を管理することです。そのため、すぐに使用できます。

選択したバックエンドが fontconfig を使用する場合は、そのマスター conf ファイルを見つけて、デフォルト ディレクトリがシステムに適していることを確認してください。そして、fc-cache を実行します

于 2013-09-17T20:35:30.813 に答える