7

私の新しいアプリケーションは、透明なアイコン/画像などを使用してオンザフライでサイズ変更できる豊富なインターフェイスを備えています。このアプリケーションでは、古き良き GDI に対して新しいDirect2D API を使用することを決定しようとしています。欠点の 1 つは、もちろん、XP で実行できないことですが、決定するのに少し厄介な問題があることがわかりました。

  1. Direct2D 環境でテキストを出力すると、少しぼやけて見えることに気付きました (ただし、機能として販売されています)。ハードウェア アクセラレーションを有効にした Firefox 4 (または IE9) のテキストを見てください。Direct2D では、GDI のようにテキストが (ピクセル) グリッドに準拠していないことが原因のようです。Direct2D を強制的にピクセル グリッドに準拠させて、この問題を解決する方法はありますか?

  2. 本当にそんなに速度が向上するのでしょうか? 私はこの記事を理解しようとしましたが、Windows 7 と XP (Vista ではありませんか?) では、GDI は可能な限りハードウェア アクセラレーションが既に行われています。たとえば、私のアプリケーションでは、適切な場所に配置されたばかりの多くのメモリDCを使用し、BitBlt透明な画像/アンチエイリアス線などを描画するためにAlphaBlend. ルーチンのテスト中に速度を測定したので、最後の 1 つは間違いなくハードウェア アクセラレーションです。

では、どこにお金を入れますか?Direct2D は手間をかける価値があるか、それとも古き良き GDI に固執しますか? それとも何か他のものを提案しますか?

注: 私は C++ でプログラミングしていますが、MFC は使用していません。

4

2 に答える 2

6

問題の修正は非常に簡単です。Direct2D は高度な構成が可能で、テキストのレンダリングとヒンティングが含まれます。GDI のレンダリング (つまり、非常に厳密なピクセル配置) に一致するようにテキストをレンダリングする場合は、次のようにします。

  • レンダー ターゲットで SetTextRenderingParams 関数を呼び出しますhttp://msdn.microsoft.com/en-us/library/windows/desktop/dd316898%28v=vs.85%29.aspx
  • GDI_CLASSIC または GDI_NATURAL の値で SetRenderingMode を呼び出すことができる IDWriteRenderingParams を渡します (ナチュラルをお勧めします)。このオブジェクトは、変数 ClearType、ガンマ、コントラストなど、さまざまな方法で構成することもできます。

もう 1 つの回答は役に立たず、Direct2D でのレンダリングを打ち砕くものだったので、Direct2D のテキスト レンダリングの概要をもう 1 つ説明しましょう。とても、とても良いです。基本的にフォントをヒントせず、テキストが実際にはぼやけて表示される Mac とは異なり、Direct2D はデフォルトで Y 方向にのみ強くヒントします。モニターの垂直方向の解像度はおそらく約 96 dpi であるため、これは理にかなっていますが、サブピクセル アンチエイリアシングを使用すると、水平方向の解像度は合理的な人間の知覚の範囲を超えています。また、ClearType の使用法とヒントは、GDI よりもはるかに微妙です。GDI テキストのエッジは、Direct2D と比較して非常にカラフルになる傾向があります。最近の GDI テキストは非常に粗雑に見えますが、長い読書セッションには Firefox と IE の Direct2D テキストの方がずっと好きです。

したがって、デフォルト モードがおそらく「ぼやけて」見える理由はいくつかあります。

  1. まず、コントロール パネルで ClearType チューナー プログラムを実行します。Direct2D プログラムの違いに驚かれることでしょう。
  2. どんなに優れていても、アプリケーションで GDI 間隔のテキストの隣に配置すると、常に奇妙に見えます。UI のすべてをどちらか一方にするか、コンテンツ領域と他の領域を明確に区別してみてください。すべてを GDI 間隔で配置する場合は、前述の方法を使用して、Direct2D を GDI 間隔テキスト モードに設定します。
  3. Windows Update から利用可能なすべての更新プログラムをインストールしていません。DirectWrite と IE 用にいくつかあります。それらをすべてインストールして再起動し、改善を確認してください。
  4. あなたはまだそれに慣れていないだけです。
  5. それはあなたの頭の中にあります。本当。テキストのレンダリングについてよく考え始めると、そこにはない「問題」に気付くでしょう。この質問に対するもう 1 つの回答は、完璧な例です。彼は、Visual Studio 2010 のテキストは 2008 よりもぼやけていると考えていると述べていますが、実際にはピクセル パーフェクトコピーです。信じられない?VS 開発者は、実際に自分でいくつかの比較を提供しました。違いがわからないに違いない。http://blogs.msdn.com/b/text/archive/2010/03/05/additional-wpf-text-clarity-improvements.aspx
于 2012-01-30T08:26:53.030 に答える
1

多くのソフトウェアが、より多くの処理能力を提供するためにムーアの法則の必然的な前進に依存しているように、GDI+ と Direct2D は、画面の解像度 (ピクセル密度) が向上し続けるという事実に基づいているようです。しかし、実際には、ピクセル密度は大幅に増加しておらず、実際には横ばい状態に達しています。

GDI のテキストは、解像度が悪いという前提で設計されています。ピクセルの位置合わせ、ヒンティング、およびその後のサブピクセル レンダリング (ClearType など) はすべて、スケーリングや回転などの任意の変換の一般性に対して、1 インチあたり 75 ~ 100 ピクセルの読みやすさという実際の制約を考慮して、うまく設計された妥協案です。

私たちの画面のピクセル密度が最新のプリンターで生成できるものに近い場合、一般性を優先してこれらの妥協を喜んで放棄します. しかし、私たちはそこにいません。私たちは近くにさえいません。個人的には、VS 2010 のエディターは VS 2008 のエディターよりもはるかに読みにくいと感じています。まさにこれらの理由からです。

考慮事項: 画面以外のデバイスについて心配する必要がありますか? プリンター?Direct2D はプリンターを処理しますか、それとも GDI ソリューションを実装する必要がありますか? Windows XP の重要性 あなたはどのくらいの将来の証拠になりたいですか? Direct2D は明らかに、Microsoft がすべての人を動かそうとしている方向です。

考慮しないこと: 速度。テクノロジーに関係なく、テキストを画面にレンダリングする速度によって制限される最新のアプリケーションはまだ見たことがありません。高度に最適化されたパスです。実際のレイアウトは、画面上でピクセル値を設定するよりもはるかにボトルネックになる可能性があります。フルスクリーンのズームをアニメーション化している場合、おそらく Direct2D が必要になるでしょう。速度のためではなく、一般的な変換とスムーズなスケーリングのためにです。

于 2011-09-21T16:53:24.780 に答える