Graphics Device Interface
Graphics Device Interface(Graphical Device Interfaceとも呼ばれる、GDI)は、カーネル及びユーザー(ウィンドウマネージャ)と協調するMicrosoft Windowsの3つの主要コンポーネント(サブシステム)の1つ。
GDIはグラフィカルオブジェクトの表示と、ディスプレイやプリンタのような出力デバイスへの転送のためのWindowsの規格である。
GDI
GDIは直線や曲線の描画、フォントのレンダリング、パレットの制御といった処理を担当する。ウィンドウやメニューなどのような上位レベルの描画については直接関わらず、より上位のuser32.dllにあるユーザーサブシステムに任される。GDIの機能はアップルのQuickDrawに似ている。
GDIはハードウェアに直接アクセスするドライバよりも上位に位置し、デバイスの機能的な調整と抽象化がGDIの役目である。GDIを使うことにより、画面やプリンタなどの多様なデバイスに容易に描画でき、そして各デバイスで適切な表示結果を望める。この機能はWindowsの全てのWYSIWYGアプリケーションの要である。
フリーセルやマインスイーパのような高速なグラフィックの描画を要求しないシンプルなゲームはGDIを使う。しかし、GDIはアニメーションをうまく表示できず(フレームバッファを同期する概念がない)、3Dのラスタライゼーション機能がないこともあり、最新のゲームではハードウェアの機能をより活用できるDirectXまたはOpenGLが使われる。
Windows Vistaでは、GDIアプリケーションは新しい描画エンジンであるデスクトップウィンドウマネージャで動作し、ハードウェアアクセラレーションは用いられない。
GDIプリンタ
GDIプリンタ(WinmodemのようにWinprintersとしても知られている)、特にGDIレーザープリンタは、本来プリンターが行う処理の一部をホストコンピュータ(パソコン)側で代行する。ホストコンピュータでビットマップイメージをレンダリングし、プリンタにビットマップを転送する。この方式には以下の2つの利点がある。
また以下の点で不利である。
- ホストコンピュータの負荷が高くなる。最近のPCでは問題ないが、古いPCで複雑なドキュメントを印刷する場合は非常に遅くなる場合がある。
- 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を渡すことができる。
DCには次の種類がある。
- 画面
- プリンタ
- メモリ
- 情報
このうち、情報は描画に用いることはできない情報取得専用のデバイスコンテキストである。
グラフィックスオブジェクト
DCに関連付けが可能なグラフィックスオブジェクトには次の種類がある。これらは、SelectObject関数によってデバイスコンテキストに関連付けさせることが可能である。
- ビットマップ
- ブラシ
- パレット
- フォント
- パス
- ペン
- リージョン
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日閲覧。