GDI & GDI+

以下主要來自百度百科"GDI+"

GDI

  GDI是Graphics Device Interface的縮寫,含義是圖形設備接口,它的主要任務是負責系統與繪圖程序之間的信息交換,處理所有Windows程序的圖形輸出。

  在Windows操作系統下,絕大多數具備圖形界面的應用程序都離不開GDI,我們利用GDI所提供的衆多函數就可以方便的在屏幕、打印機及其它輸出設備上輸出圖形,文本等操作。GDI的出現使程序員無需要關心硬件設備及設備驅動,就可以將應用程序的輸出轉化爲硬件設備上的輸出,實現了程序開發者與硬件設備的隔離,大大方便了開發工作。

GDI+

  GDI+是Windows XP中的一個子系統,它主要負責在顯示屏幕和打印設備輸出有關信息,它是一組通過C++類實現的應用程序編程接口。顧名思義,GDI+是以前版本GDI的繼承者,出於兼容性考慮,Windows XP仍然支持以前版本的GDI,但是在開發新應用程序的時候,開發人員爲了滿足圖形輸出需要應該使用GDI+,因爲GDI+對以前的Windows版本中GDI進行了優化,並添加了許多新的功能。
  作爲圖形設備接口的GDI+使得應用程序開發人員在輸出屏幕和打印機信息的時候無需考慮具體顯示設備的細節,他們只需調用GDI+庫輸出的類的一些方法即可完成圖形操作,真正的繪圖工作由這些方法交給特定的設備驅動程序來完成,GDI+使得圖形硬件和應用程序相互隔離.從而使開發人員編寫設備無關的應用程序變得非常容易。

GDI+新增了一些功能,如漸變的畫刷,技術樣條函數,可伸縮區域,多種圖像格式支持等。

DC——Device Contexts(設備描述表)。設備描述表是Windows使用的一個數據結構,用於存儲具體設備能力和與如何在設備上重繪一些項目的有關屬性信息。首先你必須獲得一個設備描述表句柄,然後在圖形繪製時,你把這個句柄作爲一個參數傳遞給GDI圖形繪製函數。

利用GDI+函數,你不必使用句柄或者設備描述表。相反,你可以簡單地創建一個圖形對象(Graphics),然後以你熟悉的面向對象的編程方式調用它的方法即可,譬如myGraphicsObject.DrawLine(parameters)。Graphics對象是GDI+的核心,正如設備描述表是GDI的核心一樣,設備描述表(DC)和圖形對象(Graphics)在不同的環境下扮演着同樣的角色,發揮着類似的作用,但是兩者也存在着本質的不同。前者使用基於句柄的編程方法而後者使用面向對象的編程方法。
  圖形對象和設備對象一樣,與屏幕的顯示窗口有關,它包含着與項目重繪有關的屬性信息(譬如平滑度),然而圖形對象並沒有像GDI那樣與Pen(畫筆)、Path(路徑)、Image(圖像)、Font(字體)等攪在一起。在GDI中,所有與繪圖有關的繪圖對象必須選入指定設備描述表中(使用SelectObject函數),才能被指定的設備描述表所使用。而在GDI+中,你只需把這些繪圖對象作爲一個參數傳遞給圖形對象Graphics方法調用即可,每一個圖形對象所使用的繪圖工具只與它調用方法使用的參數有關,它可以通過參數使用多種Pen和Brush繪圖,而不是與特定的筆和畫刷聯繫在一起。

GDI是如何實現輸出的?

  要想在屏幕或者其它輸出設備上輸出圖形或者文字,那麼我們就必須先獲得一個稱爲設備描述表( DC:Device Context)的對象的句柄,以它爲參數,調用各種GDI函數實現各種文字或圖形的輸出。
  設備描述表是GDI內部保存數據的一種數據結構,此結構中的屬性內容與特定的輸出設備(顯示器,打印機等)相關,屬性定義了GDI函數的工作細節,在稍後我們將看到如何使用TextOut函數輸出文字,在這裏屬性確定了文字的顏色,x座標和y座標映射到窗口顯示區域的方式等。
  設備描述表句柄一旦獲得,那麼系統將使用默認的屬性值填充設備描述表結構。
  如果有必要,我們可以使用一些GDI函數獲取和改變設備描述表中的屬性值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章