2

私は低レベルのアプリを書かなければならない小さなプロジェクトに取り組んでいます。そのアプリにテキストを表示したいのですが、アンチエイリアス(A la ClearType)にすることもできます。ライブラリは許可されていません。各文字をピクセルごとに描画する必要があります。

これを行うための最良の方法は何ですか?いくつかの既知のアルゴリズムをお勧めできますか?フォントをどのように保存/読み取る必要がありますか?

ありがとう!

4

4 に答える 4

3

既存のビットマップフォントのエッジを滑らかにしたいだけですか?これは、元のフォントが16x32で、8x16などでレンダリングする場合は簡単ですが、そもそも高解像度のビットマップがない場合、スムージングは​​多くの当て推量を伴う非常に重要な操作です。その場合、私は2xsaiアルゴリズム(この種のものに対して視覚的に満足のいく結果を与える)を検索し、最初にそれを実行してフォントを2倍の解像度にアップスケールし、次にエリア平均化アルゴリズムでスケールダウンします(つまり、各宛先を取得します) 4ピクセルの正方形の平均からのピクセル)。

また、実行時にこのすべての作業を実行するのではなく、最終的な「アンチエイリアス」ビットマップフォントを保存して、プログラムで使用することをお勧めします。

于 2010-11-14T20:20:26.093 に答える
2

すべてをまとめる:

フォントには主に2つのタイプがあります。

1)等幅:すべての文字のサイズが固定されており、それぞれにビットマップを定義します。アンチエイリアシングは必要ありません(ビットマップのグレーレベルをハードコーディングできます)。サイズを変更すると恐ろしく見えます。

2)True Type:各文字は、ベジェ曲線の一連のパラメーターによって定義されます。任意のサイズに簡単にスケーリングできますが、そのためには多くのプログラムロジック(および処理能力!)が必要です。ここではアンチエイリアシングが役立ちます(特にサブピクセルレンダリング技術)。

私が見ているように、ビットマップフォントと再スケーリングを使用したいですか?それらのいくつかを事前に計算するだけで、複雑なランタイムロジックを回避できます。

R.が提案したように、ビットマップをBWではなくグレースケールでより高い解像度に保つことが役立ちます。ビットマップを簡単に縮小できるように、ほとんどの小さい数値で割り切れるサイズを使用することをお勧めします。また、この解像度が十分に高い場合は、BWで維持し、グレースケールにダウンスケールできます(面積分を使用)。

編集:自由に編集してください。投票しないでください。それらすべての解説をまとめるだけです。

于 2010-11-14T20:24:21.613 に答える
0

特にスケーリングとアンチエイリアシングを行う必要がある場合は、優れたフォントエンジンを構築するのは困難です。だから私はあなたが簡単な道を取ることをお勧めします:

  1. 使用するフォントとサイズを決定します。
  2. 使用する必要のあるフォントとサイズの組み合わせごとにビットマップフォントを生成します。これは、 BitmapFontGeneratorなどのツールを使用して実行できます。
  3. プログラムでビットマップフォントを使用します。ビットマップのブリッティングは比較的簡単なはずです。

より多くの機能が必要な場合は、独自のソリューションを作成する前に、 FreeTypeなどのエンジンの使用を検討することをお勧めします。

于 2010-11-14T21:33:56.320 に答える
0

ラスター化とベジェ曲線についての知識があれば、TTF(またはその他の)フォントを読み取ってグリフをビットマップにレンダリングするのはそれほど難しくありません。悪い点は、テキストの見栄えを良くしたい場合、大量のコードが必要になることです。エイリアスフォントはレンダリングがかなり難しいので、ヒントについては話していません。カーニング、複数文字のシーケンス、どのグリフを文字にマップするかを決定するルーチン、およびエンコードするルーチンが必要です...

事前にレンダリングされたビットマップフォントを使用することをお勧めします。そうすると、レンダリング操作全体が単純な画像コピーになり、最終的にはリサンプリングまたは回転が行われます。しかし、まあ、あなたはベクトルフォント機能を失います。

私のアドバイスは、FreeTypeを使用して使用することです。これは、このための優れたライブラリであり、静的にリンクして、不要な肥大化を非常に簡単に取り除くことができます。

于 2010-11-14T22:59:19.063 に答える