Graphics Device Interface

Graphics Device Interface (GDI) について



Graphics Device Interface(GDI)は、Windowsオペレーティングシステムの中核をなすグラフィカルサブシステムの一つです。GDIは、アプリケーションがディスプレイやプリンターなどの出力デバイスにグラフィックスを表示・印刷する際に、その描画処理を抽象化し、統一的なインターフェースを提供する役割を担います。これにより、開発者は特定のハードウェアに依存することなく、多様なデバイスに対して同じように描画処理を行うことができます。

GDI の主な機能



GDIは、以下のようなグラフィックス処理を行います。

  • - 直線、曲線、矩形、楕円などの基本的な図形の描画と塗りつぶし
  • - ビットマップ画像(ラスター画像)の操作
  • - フォントの管理とレンダリング
  • - パレットの制御

これらの処理は、`gdi32.dll` というライブラリによって提供されています。

GDI の役割と特徴



GDIは、ハードウェアを直接制御するデバイスドライバーよりも上位に位置し、デバイスの機能を抽象化する役割を持っています。これにより、アプリケーションは多様な出力デバイスに対して、適切な表示結果を期待できます。この機能は、WindowsのWYSIWYGアプリケーション(見たままを印刷できるアプリケーション)にとって不可欠です。

かつては、フリーセルマインスイーパのような、高速な描画が不要なゲームにGDIが使われていましたが、GDIにはアニメーション表示が苦手(フレームバッファ同期の概念がない)、3Dラスタライズ機能がないという欠点があり、ゲーム開発には不向きです。そのため、現代のゲーム開発では、DirectX (Direct2D/Direct3D)、OpenGL、Vulkanのような、よりハードウェアの性能を最大限に活用できるグラフィックスAPIが主流となっています。

Windows Vista 以降の GDI



Windows Vistaでは、GDIアプリケーションはDesktop Window Manager (DWM) という新しい描画エンジン上で動作するようになりました。これにより、GDIコンテンツは一旦システムメモリ上のビットマップにCPUで描画されるようになり、ハードウェアアクセラレーションは用いられなくなりました。しかし、Windows 7以降では、DWMが有効になっている場合に、GDIの一部が再びハードウェアアクセラレートされるようになっています。

GDI プリンター



GDIプリンターは、プリンターで行うべき処理の一部をホストコンピュータ(PC)側で行うタイプのプリンターです。具体的には、PC側でビットマップイメージを描画し、それをプリンターに転送します。

GDI プリンターの利点



  • - プリンターに描画処理用のCPUやRAMを搭載する必要がないため、コストを削減できます。
  • - イメージを印刷することに特化できるため、性能を最適化できます。

GDI プリンターの欠点



  • - ホストコンピュータの負荷が高まります。特に古いPCで複雑なドキュメントを印刷する場合は、印刷に時間がかかることがあります。
  • - GDIプリンターは、プリンターファームウェアに標準的な印刷機能のエミュレーションを含まないことが多いです。そのため、PCLPostScriptプリンターのように、ドライバーを更新してバグに対応することが難しい場合があります。
  • - GDIプリンターは、通常Windowsでしか動作しません。他のOSでは使用できない場合があります。

最新のプリンターにおけるGDI



最新のインクジェット[[プリンター]]では、性能上の理由からGDIベースのものが増えていますが、柔軟性が高まっています。多くのプリンターがMacに対応し、Linuxコミュニティもドライバーのサポートを強化しています。一部のメーカーでは、従来の印刷エミュレーションを予備として提供することもあります。

安価なレーザープリンターもGDIデバイスであることが多いですが、PCLPostScriptに対応したモデルも存在します。

GDI の詳細



デバイスコンテキスト



デバイスコンテキストは、描画対象を抽象化した存在です。画面やプリンターへ出力するテキストやイメージの属性を定義するために使用されます。デバイスコンテキストはGDIによって管理され、ハンドルを通じて操作します。描画を行う前にデバイスコンテキストを取得し、要素の書き込み後に解放する必要があります。

デバイスコンテキストには以下の種類があります。

  • - 画面
  • - プリンター
  • - メモリ
  • - 情報(描画には使用できない情報取得専用)

グラフィックスオブジェクト



デバイスコンテキストに関連付け可能なグラフィックスオブジェクトには以下の種類があります。

  • - ビットマップ (HBITMAP)
  • - ブラシ (HBRUSH)
  • - フォント (HFONT)
  • - ペン (HPEN)
  • - リージョン (HRGN)
  • - パス (リージョンに変換可能)
  • - パレット (HPALETTE)

これらのオブジェクトは、`SelectObject` や `SelectPalette` 関数を使ってデバイスコンテキストに関連付けます。

GDIオブジェクトの数には上限があり、1セッションで65,535個まで、1プロセスで10,000個までという制限があります。

GDI+ (Graphics Device Interface Plus)



GDI+は、Windows XPで導入された新しいグラフィックスサブシステムです。GDI+は、アルファブレンド、グラデーション、アンチエイリアス、より複雑なラインパス管理、JPEGやPNGなどの新しい画像形式のサポート、2D変換の合成など、GDIにはなかった高度な機能を提供します。

GDI+は、ネイティブC++のクラスライブラリとして提供されていますが、.NET FrameworkDelphiなどの言語でも利用可能です。

Direct2D



Direct2Dは、Windows 7で導入された、ハードウェアアクセラレーションを活用した2DグラフィックスAPIです。Direct2Dは、GDI+の描画性能を改善するために開発され、Direct3Dを基盤としています。これにより、DWMの有無に関わらずハードウェアアクセラレーションが有効になり、より高速な描画が可能になりました。

Direct2Dは、OpenTypeフォントや垂直方向へのClearTypeアンチエイリアスなど、GDI+にはない機能も備えています。

Direct2Dでは、画像ファイルの読み書きはWIC(Windows Imaging Component)が担当します。

Direct2Dは、Direct3Dとの連携機構を備えており、Direct3Dテクスチャに直接書き込むことができます。

Direct2D 1.0では印刷機能は直接サポートされていませんでしたが、Direct2D 1.1以降では印刷機能もサポートされています。

関連情報




外部リンク



もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。