Graphics Device Interface Graphics Device Interfaceの概要

Graphics Device Interface

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2023/08/19 19:38 UTC 版)

GDIはグラフィカルオブジェクトの表示と、ディスプレイプリンターのような出力機器への転送のためのWindows規格である。

GDI

GDIは直線や曲線の描画、矩形や楕円の描画と塗りつぶし、ビットマップ画像(ラスター画像)の操作、フォントの管理とレンダリングパレットの制御[2]といった処理を担当する(gdi32.dll)。ウィンドウメニューなどのような上位レベルの描画については直接関わらず、より上位の user32.dll にあるユーザーサブシステムに任される。

GDIはハードウェアに直接アクセスするデバイスドライバーよりも上位に位置し、デバイスの機能的な調整と抽象化がGDIの役目である。GDIを使うことにより、画面やプリンターなどの多様なデバイスに容易に描画でき、そして各デバイスで適切な表示結果を望める。この機能はWindowsの全てのWYSIWYGアプリケーションの要である。

フリーセルマインスイーパWindows XP以前)のような高速な描画が不要なゲームはGDIを使用していた。しかし、GDIはアニメーションをうまく表示できず(フレームバッファ同期の概念が無い)[注釈 1]3D ラスタライズ機能がないこともあり、ゲーム開発には不向きである。そのため、ゲーム開発では一般的に2D/3D問わず、ハードウェアの機能や性能をより活用できるDirectX (Direct2D/Direct3D) やOpenGLVulkanが使われる。

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

GDI プリンター

GDI プリンター(Winmodem のように Winprinters としても知られている)、特に GDI レーザープリンターは本来プリンターが行う処理の一部をホストコンピュータ (PC) 側で代行する。ホストコンピュータでビットマップイメージを描写し、プリンターにビットマップを転送する。この方式には以下の2つの利点がある。

  • 描画処理用 CPURAM をプリンターに搭載する費用を節約できる。
  • 受け取ったイメージを印刷することに特化することで性能の最適化ができる。

また、以下の点で不利である。

  • ホストコンピュータの負荷が高くなる。最近のPCでは問題ないが、古いPCで複雑なドキュメントを印刷する場合は非常に遅くなる場合がある。
  • GDI プリンターは通常、プリンターのファームウェアに標準的な印刷機能のエミュレーションを含まない(またはそれを処理できる能力を持たない)。ハイエンドPCL プリンターや PostScriptプリンターでは、ソフトウェアの互換性やドライバーのバグなどの問題があった場合にドライバーを更新して対応できるが、GDI プリンターでは対応策がない場合がある。
  • GDIプリンターは一般的に Windows に限り動作する。例外はあるが、他の OS では原則的に GDI プリンターを使用できない。

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

一般的には安価なレーザプリンターは GDI デバイスであるが、多くのメーカーでは PCLPostScript あるいはその両方の機能を持つモデルも製造している。GDI のみに対応するプリンターはどのメーカーにおいても最も安価なモデルとして位置づけられる。

詳細

デバイスコンテキスト

デバイスコンテキスト (device context) は、描画する対象を抽象化した存在である。画面またはプリンターへ出力するテキストおよびイメージの属性を定義するために使われ、関連付けられたグラフィックスオブジェクトとそれに関連する属性の集合からなる。実際のコンテキストはGDIによって管理される。構造体へのハンドルであるデバイスコンテキストは出力を行う前に取得し、要素が書き込まれた後に解放する。大抵のGDIオブジェクトのように、デバイスコンテキストは直接データにアクセスできないという意味で隠蔽されているが、それを制御し、何かを描画し、情報を取得し、オブジェクトを変更するといったような様々な GDI 関数にデバイスコンテキストを渡すことができる。

デバイスコンテキストには次の種類がある。

  • 画面
  • プリンター
  • メモリ
  • 情報(インフォメーションコンテキスト)

このうち、情報は描画に用いることはできない情報取得専用のデバイスコンテキストである。

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

デバイスコンテキストに関連付けが可能なグラフィクスオブジェクトには次の種類がある。これらは、SelectObject関数[10]SelectPalette関数[11]によってデバイスコンテキストに関連付けさせることが可能である。

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

なおGDIオブジェクトの数は、1セッションで65,535個まで、そして1プロセスで10,000個までという上限が設けられている[12]


注釈

  1. ^ Direct3DやDirect2DのようなグラフィックスAPIは、ディスプレイのリフレッシュレートに合わせてフロントバッファ(表画面)とバックバッファ(裏画面)を入れ替える垂直同期の機能が用意されているため、テアリング現象を防ぐことができ、また1/60秒などの一定間隔で更新されるアニメーションを容易に実現できる[3][4]。GDIでアニメーションを実現する方法のひとつとして、タイマーを使う方法が挙げられるが、WindowsのWM_TIMERによるタイマーはメッセージ優先度が低い[5]こともあって分解能も精度も悪く、API仕様上もUSER_TIMER_MINIMUMすなわち10ミリ秒未満のタイマー間隔を指定できない[6]。ただしWindows 7以降は、Direct3D/Direct2DだけでなくGDI/GDI+と組み合わせて使うこともできるWindows Animation Managerが追加されている[7]

出典

  1. ^ Overview of the Windows Graphics Architecture - Win32 apps | Microsoft Learn
  2. ^ GDI Support for Palettes - Windows drivers | Microsoft Learn
  3. ^ What Is a Swap Chain? (Direct3D 9) - Win32 apps | Microsoft Learn
  4. ^ §Presentation Model : Comparing Direct2D and GDI Hardware Acceleration - Win32 apps | Microsoft Learn
  5. ^ WM_TIMER message (Winuser.h) - Win32 apps | Microsoft Learn
  6. ^ SetTimer function (winuser.h) - Win32 apps | Microsoft Learn
  7. ^ Windows Animation Manager - Win32 apps | Microsoft Learn
  8. ^ §GDI rendering in Windows 7 : Comparing Direct2D and GDI Hardware Acceleration - Win32 apps | Microsoft Learn
  9. ^ §Availability of Hardware Acceleration : Comparing Direct2D and GDI Hardware Acceleration - Win32 apps | Microsoft Learn
  10. ^ SelectObject function (wingdi.h) | Microsoft Docs
  11. ^ SelectPalette function (wingdi.h) | Microsoft Docs
  12. ^ Windows の限界に挑む: USER オブジェクトと GDI オブジェクト – 第 2 部
  13. ^ GDI+” (英語). MSDN ライブラリ. マイクロソフト. 2008年9月13日時点のオリジナルよりアーカイブ。2009年2月22日閲覧。
  14. ^ Platform SDK Redistributable: GDI+” (英語). ダウンロードセンター. マイクロソフト. 2009年2月22日閲覧。[リンク切れ]
  15. ^ Download Platform SDK Redistributable: GDI+ from Official Microsoft Download Center”. Microsoft (2009年10月13日). 2015年1月25日閲覧。[リンク切れ]
  16. ^ System.Drawing Namespace | Microsoft Docs
  17. ^ About GDI+ Managed Code | Microsoft Docs
  18. ^ §GDI and Direct2D hardware acceleration : Comparing Direct2D and GDI Hardware Acceleration - Win32 apps | Microsoft Learn
  19. ^ What's new in Direct2D - Win32 apps | Microsoft Learn
  20. ^ Printing and command lists - Win32 apps | Microsoft Learn


「Graphics Device Interface」の続きの解説一覧




固有名詞の分類


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「Graphics Device Interface」の関連用語

Graphics Device Interfaceのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



Graphics Device Interfaceのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのGraphics Device Interface (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2025 GRAS Group, Inc.RSS