GDI+ が登場したとき、Windows で何かを表示するための "新しく、より速く、より優れた" 方法であるという大騒ぎを覚えています。しかし、それを見るたびに、それは本当に単なる GDI の COM ラッパーに過ぎないように思えました。
本当?それとも、GDI+ は本当に独立したグラフィカル ライブラリであり、いくつかのパラダイムを GDI と共有しているだけなのでしょうか?
個人的には、それがどのように独立しているのかはわかりませんが、何らかの形で明確な声明を見たことはありません.
GDI +はGDI上に構築されており、さらにいくつかの機能が追加されています。たとえば、GDI +は、透明度、アンチエイリアシングビットマップストレッチなどのサポートを追加します...
GDI +は主にオブジェクトベースのAPIであり、GDIは関数APIです。GDI +の機能のほとんどは、GDIとは対照的に、ハードウェアに最適化されていません(ソフトウェアによって処理されます)。たとえば、GDIでは、BitBltはハードウェアによって直接処理されます。GDI+ビットマップペインティング機能はそうではありません。
GDI +は強力なAPIですが、そのパフォーマンスには注意してください。
GDI +は、C ++、COM、および.NETで使用できます。
GDI+はCOMではありません。GDI +には、C(または他の言語)から呼び出すことができる基盤となる「フラット」APIと、フラットAPIを呼び出すだけのC++のオブジェクト指向ラッパーがあります。.NET(System.Drawing)とDelphiには、フラットAPIを呼び出すラッパーもあります。オブジェクト(ペン、ブラシ、フォント)をデバイスコンテキストに設定せず、描画関数に渡すという点で、GDIとはまったく異なります。GDIとの共通点はあまりありません。GDI +の実装でGDIが使用されているかどうかはわかりませんが、GDIで使用できない機能が非常に多いため、使用されていない可能性があります。
残念ながら、GDIよりも低速です。しかし、それは非常に強力です。
その間にdecasteljauが指摘したように、パフォーマンスの問題は、OpenVGやWPFとは異なり、ハードウェアでレンダリングされないという事実に起因する可能性があります。最近、グラフィカルなリアルタイムアプリケーションにXNAを使用しました。
多くの GDI 関数はグラフィックス ハードウェアによって高速化され、一部の GDI+ ルーチンは GDI を基に使用する場合があります。しかし、GDI+ のほとんどは GDI から独立しています。
重要でわかりやすい例は、テキストのレンダリングです。GDI+ では、テキストのレンダリングは完全にソフトウェアで行われます。アンチエイリアシング、グリフ ピクセル フィッティング、およびその他の効果は、ビデオ カードなしで実行されます。
(ソース: microsoft.com )
Microsoft の Chris Jackson は興味深いブログ投稿を行っており、GDI と GDI+ でのテキスト レンダリングの速度の違いを紹介しています。
...私の GDI コード パスは毎秒約 99,000 個のグリフをレンダリングしていましたが、GDI+ コード パスは毎秒約 16,000 個のグリフをレンダリングしていました。
別の例は線画です。GDI+ は、アンチエイリアス処理された線/多角形および円/楕円の描画をサポートしていますが、GDI は次のことをサポートしていません:
(出典: microsoft.com ) (出典: microsoft.com )
(ソース: microsoft.com )