Graphics Device Interface
Graphics Device Interface(Graphical Device Interfaceとも呼ばれる、GDI)は、カーネル及びユーザー(ウィンドウマネージャ)と協調するWindowsの3つの主要コンポーネント(サブシステム)の1つ。
GDIはグラフィカルオブジェクトの表示と、ディスプレイやプリンタのような出力デバイスへの転送のためのWindowsの規格である。
GDI
GDIは直線や曲線の描画、フォントのレンダリング、パレットの制御といったタスクを担当する。ウィンドウやメニューなどのような描画については直接関わらず、GDIの上位に構築されるuser32.dll内のユーザーサブシステムに任される。GDIはアップルの伝統的なQuickDrawに似ている。
ハードウェアへの直接的なアクセスより上位にあるGDIの最も重要な機能は、その機能的な調整と、ターゲットデバイスの抽象化だろう。GDIを使うことにより、画面やプリンタなどの多様なデバイスへ非常に簡単に描画でき、そして各デバイスに対して適切な表示結果を望める。この機能はWindowsの全てのWYSIWYGアプリケーションの要である。
フリーセルやマインスイーパのような高速なグラフィックの描画を要求しないシンプルなゲームはGDIを使う。しかし、GDIはアニメーションを適切に表示できず(フレームバッファを同期する概念がない)、3Dのラスタライゼーション機能がないこともあり、最新のゲームではハードウェアの機能をより活用できるDirectXまたはOpenGLが使われる。
Windows Vistaでは、GDIアプリケーションは新しい描画エンジンであるデスクトップウィンドウマネージャで動作し、ハードウェアアクセラレーションされるものではなくなる。
GDIプリンタ
GDIプリンタ(WinmodemのようにWinprintersとしても知られている)、特にGDIレーザープリンタは、ホストコンピュータの機能を「利用して」従来のプリンタの処理を代替する。ホストコンピュータでビットマップイメージをレンダリングし、プリンタにビットマップを転送することにより機能する。この方式には以下の2つの利点がある。
不利な点は、
- ホストシステムのリソースに高い負荷を押し付ける。最近のシステムでは普通は問題ではないが、古いシステム(一般に200〜500MHzの範囲)ではドキュメントが複雑になることで印刷が耐えられないほど遅くなりうる。
- GDIプリンタは通常、プリンタのファームウェアに標準的なエミュレーションを含まない(それらを実装する処理能力も同様)。その結果、ハイエンドのPCL (Printer Command Language) プリンタやPostScriptプリンタでは、ソフトウェアの互換性やドライバのバグの問題があった場合には予備のドライバと差し替えることができるが、GDIプリンタでは回避策が無い場合が多い。
- GDIプリンタは一般的にWindowsに限り動作する。例外はあるが、他のオペレーティングシステムでのGDIプリンタを使用は、原則として不可能である。
最新のインクジェットプリンタの機種はGDIベース(レーザーではコストが主要因であるのに対し、ここでは主にパフォーマンスの理由)であるが、より柔軟な傾向がある。多くがMacintoshをサポートし、LinuxのコミュニティではLinux版ドライバのサポートをかなり改善した。一部(特にセイコーエプソン)ではより伝統的なエミュレーションを予備として提供することが多い。
一般的に、最近の安価なレーザープリンタはGDIデバイスである。一方で、多くのメーカーはPCLやPostScript、あるいはその両方の機能が追加されたより柔軟なモデルも製造している。多くの場合、GDIのみのプリンタは、どんなメーカーの商品構成においても非常に安価なモデルに過ぎない。
技術的な詳細
デバイスコンテキスト (DC) は画面またはプリンタへ出力するテキスト及びイメージの属性を定義するために使われる。実際のコンテキストはGDIによって管理される。構造体へのハンドルであるDCは出力が書き込まれる前に取得し、要素が書き込まれた後に開放する。
大抵のGDIオブジェクトのように、DCは直接データにアクセスできないという意味で隠蔽されているが、それを制御し、何かを描画し、情報を取得し、オブジェクトを変更するといったような様々なGDI関数にDCを渡すことができる。
GDI+
GDI+は、Windows XPで新しく登場したグラフィックサブシステムである。Windows XP以降、標準搭載されているほか、Windows 98/NT 4.0 SP6以降で使用可能である[1][2]。GDI+は「次世代」の2Dグラフィック環境であり、アルファブレンド、グラデーション (gradient shading)、より複雑なラインパス管理、(GDIで特に欠けていた)JPEGやPNGのような最新の画像ファイルフォーマットの根本的なサポート、2Dビューのパイプライン上のアフィン変換の合成に対する統合的なサポートといった先進的な機能を追加している。これらの機能はWindows XPのユーザインタフェースでこれ見よがしに使われており、基本的なグラフィックレイヤのこうした表現は、FlashやSVGといったベクターグラフィックシステムの実装を大きく単純化する。
.NET FrameworkのクラスライブラリではSystem.Drawing
の名前空間にGDI+のマネージインタフェースが用意されており、標準的に使用されている。
なお、Vistaで1.1にバージョンが上がった。
GDI+は(その目的と構造が)アップルのQuartz 2Dサブシステム、オープンソースのlibart、Cairoライブラリと似ている。
脚注
- ^ “GDI+” (英語). MSDN ライブラリ. マイクロソフト. 2009年2月22日閲覧。
- ^ “Platform SDK Redistributable: GDI+” (英語). ダウンロードセンター. マイクロソフト (日付(YYYY-MM-DD)). 2009年2月22日閲覧。