Windows 提供數個 C++/COM 圖形 API。 下圖顯示這些 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 在 bitblt 操作期間支援 alpha 混合。 GDI+ 支援透明度,但 Alpha 混合是由 CPU 執行,因此不會受益於硬體加速。
硬體加速 Alpha 混合也可啟用消除鋸齒功能。 別名化 是取樣連續函數所造成的假象。 例如,當曲線轉換成圖元時,鋸齒效應可能會導致鋸齒狀外觀。 任何能減少鋸齒化所造成的瑕疵的技術都被視為消除鋸齒化的一種方式。 圖形中的反鋸齒是通過將邊緣與背景混合來實現的。 例如,以下是由 GDI 繪製的圓形,以及 Direct2D 繪製的相同圓形。
下一個影像顯示每個圓形的詳細數據。
由 GDI (左) 繪製的圓形是由近似曲線的黑色圖元所組成。 Direct2D 繪製的圓形使用混合技術,使曲線更平滑。
GDI 在繪製幾何圖形時不支援抗鋸齒(線條和曲線)。 GDI 可以使用 ClearType 繪製抗鋸齒文字,否則 GDI 文字將會出現鋸齒。 文字的鋸齒現象特別明顯,因為鋸齒狀的線條干擾了字型設計,使文字不易閱讀。 雖然 GDI+ 支援反鋸齒功能,但 CPU 會套用它,因此效能不如 Direct2D。
向量圖形
Direct2D 支援 向量圖形。 在向量圖形中,數學公式可用來表示線條和曲線。 這些公式不相依於螢幕解析度,因此可以調整為任意維度。 當影像必須調整以支援不同的監視器大小或螢幕解析度時,向量圖形特別有用。
下一步