共用方式為


Windows 圖形架構概觀

Windows 為圖形提供數個 C++/COM API。 下圖顯示這些 API。

顯示 Windows 圖形 API 的圖表。

  • 圖形裝置介面 (GDI) 是 Windows 的原始圖形介面。 GDI 最初是針對 16 位 Windows 撰寫,然後針對 32 位和 64 位 Windows 更新。
  • GDI+ 是在 Windows XP 中引進,作為 GDI 的後續任務。 GDI+ 程式庫是透過一組包裝一般 C 函式的 C++ 類別來存取。 .NET Framework也會在System.Drawing命名空間中提供受控版本的 GDI+ 。
  • Direct3D 支援 3D 圖形。
  • Direct2D 是適用于 2D 圖形的新式 API,GDI 和 GDI+ 的後續任務。
  • DirectWrite是文字配置和點陣化引擎。 您可以使用 GDI 或 Direct2D 來繪製點陣化文字。
  • DirectX Graphics Infrastructure (DXGI) 會執行低階工作,例如呈現輸出的畫面格。 大部分的應用程式不會直接使用 DXGI。 相反地,它可作為圖形驅動程式與 Direct3D 之間的中繼層。

Direct2D 和 DirectWrite 是在 Windows 7 中引進的。 Windows Vista 和 Windows Server 2008 也透過平臺更新提供。 如需詳細資訊,請參閱 Windows Vista 的平臺更新

Direct2D 是本課程模組的重點。 雖然 Windows 仍支援 GDI 和 GDI+ ,但建議針對新程式使用 Direct2D 和 DirectWrite。 在某些情況下,混合的技術可能比較實用。 在這些情況下,Direct2D 和 DirectWrite 是設計來與 GDI 交互操作。

下一節說明 Direct2D 的一些優點。

硬體加速

硬體加速一詞是指圖形處理器所執行的圖形計算, (GPU) ,而不是 CPU。 新式 GPU 已針對轉譯圖形中使用的計算類型進行高度優化。 一般而言,從 CPU 移至 GPU 的這項工作越多,越好。

雖然 GDI 支援特定作業的硬體加速,但許多 GDI 作業都會系結至 CPU。 Direct2D 分層在 Direct3D 之上,並充分利用 GPU 所提供的硬體加速。 如果 GPU 不支援 Direct2D 所需的功能,則 Direct2D 會回復為軟體轉譯。 整體而言,Direct2D 在大部分情況下都優於 GDI 和 GDI+ 。

透明度和消除鋸齒

Direct2D 支援完全硬體加速的 Alpha 混合 (透明度) 。

GDI 對 Alpha 混合的支援有限。 大部分的 GDI 函式都不支援 Alpha 混合,雖然 GDI 在位運算期間支援 Alpha 混合。 GDI+ 支援透明度,但 Alpha 混合是由 CPU 執行,因此不會受益于硬體加速。

硬體加速 Alpha 混合也可啟用消除鋸齒功能。 別名 是取樣連續函式所造成的成品。 例如,當曲線轉換成圖元時,別名可能會造成不規則的外觀。 任何減少別名所造成成品的技術都會被視為消除鋸齒的形式。 在圖形中,反鋸齒是透過將邊緣與背景混合來完成。 例如,以下是 GDI 繪製的圓形,以及 Direct2D 所繪製的相同圓形。

direct2d 中的反鋸齒技術圖例。

下圖顯示每個圓形的詳細資料。

上圖的詳細資料。

由 GDI 繪製的圓形 (左方) 是由近似曲線的黑色圖元所組成。 Direct2D 所繪製的圓形 (右方) 使用混合來建立更平滑的曲線。

GDI 在繪製幾何 (線條和曲線時,不支援反鋸齒) 。 GDI 可以使用 ClearType 繪製反鋸齒文字;但另一方面,GDI 文字也會有別名。 文字的別名特別明顯,因為不規則的行會中斷字型設計,使文字更容易閱讀。 雖然 GDI+ 支援反鋸齒,但 CPU 會套用它,因此效能不如 Direct2D 一樣好。

向量圖形

Direct2D 支援 向量圖形。 在向量圖形中,數學公式是用來代表線條和曲線。 這些公式不相依于螢幕解析度,因此可以調整為任意尺寸。 當影像必須縮放以支援不同的監視器大小或螢幕解析度時,向量圖形特別有用。

下一個

桌面視窗管理員