0

現在、カイロ/パンゴを使用して、動的テキストから生の画像データを生成しています。私のアプリケーションは Gtk+ GUI アプリではなく、ネイティブの C++ ヘッドレス ビデオ サーバーです。ダイナミック テキストを使用して、オーバーレイ用の生の画像を生成し、サーバーが処理してネットワーク経由で配信するビデオ ストリーム上でそれらをアルファ ブレンドします。このテキストに関連するテキスト編集はありませんが、与えられたテキストに対応する、アルファ ブレンディングに適した画像オーバーレイを生成します。

ただし、フォーマットの柔軟性 (インデント、中央揃えなど) が必要です。cairo/pango で大規模な書式設定を行うのは苦痛です。

私は GtkTextView/GtkTextBuffer API を見てきましたが、GtkTextTag を使用すると簡単にフォーマットできると思います。これらのウィジェットには明らかに広範な編集機能がありますが、必要なのは書式設定機能だけです。

質問: gtk_init()/gtk_main() 経由でメインの gtk+ ループを実行せずにGtkTextView/GtkTextBuffer/GtkTextTag を使用できますか?

質問:すべてのタグがテキストをフォーマットした、生のフォーマット済みバッファ (cairo 画像サーフェスまたはウィジェット pixbuf) への参照を取得するにはどうすればよいですか?

gtk_widget_get_pango_context()、pango_layout_new()、gtk_widget_create_pango_layout()、ルーチンを使用していますが、画面がないため、あらゆる種類のエラーが発生します。

編集: 追加情報: 私がやろうとしているのは、基本的に GtkTextView/GtkTextBuffer/GtkTextTag ルーチンのみを、レンダリングおよびフォーマットされたテキストの画像データを生成するための一種のスタンドアロン ライブラリとして使用することです。

ありがとう、-アンドレス

4

1 に答える 1

3

基本的にいいえ。init() や mainloop() なしでは Gtk を使用できません。なんで?描画イベントはキューに入れられ、アイドル ループでのみ描画されるためです。mainloop() がなければ、アイドル時間はありません。

一方、Cairo での低レベルの描画から gtk の Widgets (低レベルで Cairo を使用) にジャンプしています。検討できる多くの中間ソリューションがあります。Latexを生成してコンパイルできます。Markdownは単純な書式設定を使用できます。もちろん、CSS を使用して何でもレンダリングできる HTML もあります。

于 2017-01-06T15:25:57.263 に答える