2016-11-22 7 views
3

私はOpenGLのためのシンプルなビットマップフォントレンダラーを書いています。私はUnicodeも同様にレンダリングしたいと思います。しかし、多くのフォントでは、一部の文字が欠けており、四角形としてレンダリングされています。これらは結果的に私のテクスチャの空間を無駄にし、それらを取り除きたいのです。特定の文字を特定のフォントを使用して豆腐の四角形としてレンダリングするかどうかを検出するWinAPI関数はありますか?私はGDIを使用していWindowsでは、Unicode文字が正方形(tofu)としてレンダリングされるかどうかを検出する方法はありますか?

、私はCreateFontIndirectを使用してフォントを取得し、ExtTextOutWを使用してグリフの描画、その後、CreateDIBSectionを使用してオフスクリーンビットマップを作ります。

これまでのところ、私は豆腐をラスタライズされた形で(ピクセルを比較して)検出することを考えていましたが、それはあまり良くないと思います。また、私は、 "テンプレート"を比較するために、与えられたフォントにはないUnicode文字を取得する必要があります。遅かれ早かれそれが問題になるだろうと思う。

+1

[GetFontUnicodeRanges()](https://msdn.microsoft.com/en-us/library/windows/desktop/dd144887(v = vs.85).aspx)にお問い合わせください。 @AlexK。 –

+0

それは非BMP文字をサポートしていますか? 'WCRANGE'構造体はサロゲートペアの予約を行いません。 – andlabs

+0

テクスチャをどのように準備していますか? GDI? GDI +? DirectWrite? TTF/OTFファイルを手動で処理しますか? – andlabs

答えて

2

3Dレンダラ用のグリフマップを作成するときに、私自身のフォントリンクとフォントフォールバックを実装するために、同様のことをする必要がありました。 Uniscribeを使用して、文字列をフォントにグリフインデックスの文字列に変換しました。次に、ScriptGetFontPropertiesを使ってフォントのwgDefaultプロパティを取得し、その値を各グリフインデックスに比較しました。

GetCharacterPlacementのようなものを使用して、グリフインデックスにテキストを変換した後、ETO_GLYPH_INDEXでExtTextOutを使用しますが、Uniscribeが行うすべてのキーシェーピングと並べ替えはできません。まずは、BMPを超えてもうまくいくとは思わない。

必ずしも四角形ではないため、欠けているシンボルのグリフにグラフィックで一致させたくありません。たとえば、一部のフォントでは、黒い菱形で疑問符がついています。

関連する問題