天天看點

Windows GDI和GDI+差別(執行個體剖析)

1、概述

        GDI在全稱是Graphics Device Interface,即圖形裝置接口。是圖形顯示與實際實體裝置之間的橋梁。GDI接口是基于函數,雖然使程式員省力不少,但是程式設計方式依然顯得麻煩。例如顯示一張位圖,我們需要進行“建立位圖,讀取位圖檔案資訊,啟用場景裝置,調色闆變化“等一系列操作。然而有了GDI+,繁瑣的步驟再次被簡化。顧名思義,GDI+就是GDI的增強版,它是微軟在Windows 2000以後作業系統中提供的新接口。

2、GDI+主要功能         GDI+主要提供以下三種功能:         (1) 二維矢量圖形:GDI+提供了存儲圖形基元自身資訊的類(或結構體)、存儲圖形基元繪制方式資訊的類以及實際進行繪制的類;

        (2) 圖像處理:大多數圖檔都難以劃定為直線和曲線的集合,無法使用二維矢量圖形方式進行處理。是以,GDI+為我們提供了Bitmap、Image等類,它們可用于顯示、操作和儲存BMP、JPG、GIF等圖像格式。

        (3) 文字顯示:GDI+支援使用各種字型、字号和樣式來顯示文本。         相比于GDI,GDI+是基于C++類的對象化的應用程式接口,是以用起來更為簡單。GDI的核心是裝置上下文,GDI函數都依賴于裝置上下文句柄,其程式設計方式是基于句柄的;GDI+無需時刻依賴于句柄或裝置上下文,使用者隻需建立一個Graphics 對象,就可以用面向對象的方式調用其成員函數進行圖形操作,程式設計方式是基于對象的。

3、GDI繪制執行個體         GDI在使用裝置上下文繪制線條之前,必須先調用SelectObject 以使筆對象和裝置上下文關聯。其後,在裝置上下文中繪制的所有線條均使用該筆,直到選擇另一支不同的筆為止。         使用GDI畫線代碼如下

        從上述代碼可以看出:在GDI程式設計中,幾乎所有的操作都圍繞裝置上下文dc展開。的确,這正是GDI程式設計的特點!裝置上下文是 Windows 使用的一種結構,所有GDI操作前都需取得特定裝置的上下文,函數中的CClientDC dc (this) 語句完成這一功能。 利用GDI進行圖形、圖像處理的一般操作步驟為:1. 取得指定視窗的DC。2. 确定使用的坐标系及映射方式。3. 進行圖形、圖像或文字處理。4. 釋放所使用的DC。但是,在GDI+中,隻需将Pen對象直接作為參數傳遞給Graphics類的DrawLine等方法即可,而不必使Pen對象與 Graphics對象關聯。 4、GDI+繪制執行個體         使用GDI+畫線代碼如下  

        (1)建立 Graphics 對象:Graphics 對象表示GDI+繪圖表面,是用于建立圖形圖像的對象。         (2)使用 Graphics 對象繪制線條和形狀、呈現文本或顯示與操作圖像。         GDI+的相對與GDI而言,新增了一系列功能:漸變的畫刷(Gradient Brushes)、基數樣條函數(Cardinal Splines)、持久的路徑對象(Persistent Path Objects)、變形和矩陣對象(Transformations &Matrix Object)、可伸縮區域(Scalable Regions)、Alpha混合(Alpha Blending)和豐富的圖像格式支援等。下面,我們來逐個用實際代碼實作GDI+的新增功能。     4.1漸變的畫刷         (GDI+提供了用于填充圖形、路徑和區域的線性漸變畫刷和路徑漸變畫刷。線性漸變畫刷使用漸變顔色來填充圖形。當用路徑漸變畫刷填充圖形時,可指定從圖形的一部分移至另一部分時畫刷顔色的變化方式。例如,我們可以隻指定圖形的中心顔色和邊緣顔色,當畫刷從圖形中間向外邊緣移動時,畫刷會逐漸從中心顔色變化到邊緣顔色。 )  

    4.2基數樣條函數         (基數樣條指的是一連串單獨的曲線,這些曲線連接配接起來形成一條較大的曲線。樣條由點(Point結構體)的數組指定,并通過該數組中的每一個點。基數樣條平滑地穿過數組中的每一個點(不出現尖角),是以比用直線連接配接建立的路徑精确。)  

    4.3變形和矩陣對象         (GDI+提供了Matrix對象,它是一種可以使變形(旋轉、平移、縮放等) 簡易靈活的強大工具,Matrix對象需與要被變形的對象聯合使用。對于GraphicsPath類,我們可以使用其成員函數Transform接收 Matrix參數用于變形。)  

    4.4豐富的圖像格式支援         (GDI +提供了Image、Bitmap 和Metafile 類,友善使用者進行圖像格式的加載、操作和儲存。GDI+支援的圖像格式有BMP、GIF、JPEG、EXIF、PNG、TIFF、ICON、WMF、 EMF等,幾乎涵蓋了所有的常用圖像格式。)  

繼續閱讀