コンテンツにスキップ

Graphics Device Interface

出典: フリー百科事典『ウィキペディア(Wikipedia)』

これはこのページの過去の版です。Point136 (会話 | 投稿記録) による 2008年7月19日 (土) 21:59個人設定で未設定ならUTC)時点の版 (Bot:rdr プリンタ)であり、現在の版とは大きく異なる場合があります。

GDI(ジーディーアイ、Graphics Device Interface。Graphical Device Interfaceとも呼ばれる)は、カーネル及びユーザー(ウィンドウマネージャ)と協調するMicrosoft 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つの利点がある。

  • グラフィック処理用CPURAMをプリンタに搭載するコストを節約できる(一般的には約50米ドル)。
  • それ専用に実装することでパフォーマンス的に有利である。

不利な点は、

  • ホストシステムのリソースに高い負荷を押し付ける。最近のシステムでは普通は問題ではないが、古いシステム(一般に200~500MHzの範囲)ではドキュメントが複雑になることで印刷が耐えられないほど遅くなりうる。
  • GDIプリンタは通常、プリンタのファームウェアに標準的なエミュレーションを含まない(それらを実装する処理能力も同様)。その結果、ハイエンドPCL(Printer Command Language)プリンタやPostScriptプリンタでは、ソフトウェアの互換性やドライバのバグの問題があった場合には予備のドライバと差し替えることができるが、GDIプリンタでは回避策が無い場合が多い。
  • GDIプリンタは一般的にWindowsに限り動作する。例外はあるが、他のOSでGDIプリンタを使うことはルール的には不可能である。

最新のインクジェットプリンタの機種はGDIベース(レーザーではコストが主要因であるのに対し、ここでは主にパフォーマンスの理由)であるが、より柔軟な傾向がある。多くがMacintoshをサポートし、LinuxのコミュニティではLinux版ドライバのサポートをかなり改善した。一部(特にセイコーエプソン)ではより伝統的なエミュレーションを予備として提供することが多い。

一般的に、最近の安価なレーザープリンタはGDIデバイスである。一方で、多くのメーカーはPCLやPostScript、あるいはその両方の機能が追加されたより柔軟なモデルも製造している。多くの場合、GDIのみのプリンタは、どんなメーカーの商品構成においても非常に安価なモデルに過ぎない。

技術的な詳細

DC(デバイスコンテキスト)は画面またはプリンタへ出力するテキスト及びイメージの属性を定義するために使われる。実際のコンテキストはGDIによって管理される。構造体へのハンドルであるDCは出力が書き込まれる前に取得し、要素が書き込まれた後に開放する。

大抵のGDIオブジェクトのように、DCは直接データにアクセスできないという意味で隠蔽されているが、それを制御し、何かを描画し、情報を取得し、オブジェクトを変更するといったような様々なGDI関数にDCを渡すことができる。

GDI+

Windows XPで、GDIはその後継であるC++ベースのサブシステムGDI+によって株を奪われた。GDI+は「次世代」の2Dグラフィック環境であり、アルファブレンド、グラデーション(gradient shading)、より複雑なラインパス管理、(GDIで特に欠けていた)JPEGPNGのような最新のグラフィックファイルフォーマットの根本的なサポート、2Dビューのパイプライン上のアフィン変換の合成に対する統合的なサポートといった先進的な機能を追加している。これらの機能はWindows XPのユーザーインターフェイスでこれ見よがしに使われており、基本的なグラフィックレイヤのこうした表現は、FlashSVGといったベクターグラフィックシステムの実装を大きく単純化する。GDI+のDLLはアプリケーションと共にインストールされ、Windowsの古いバージョンでも利用できる。

.NET FrameworkのクラスライブラリではSystem.Drawing名前空間にGDI+のマネージインタフェイスを提供する。

GDI+は(その目的と構造が)アップルQuartz 2Dサブシステム、オープンソースのlibartCairoライブラリと似ている。

関連項目

外部リンク