標 題: 一些關(guān)于GDI+的文字——概述
發(fā)信站: 浙江大學(xué)海納百川站 (Tue Oct 26 11:52:51 2004), 轉信
2001年6月,微軟新發(fā)布GDI+(念GDI plus)。此技術(shù)首先被應用于Windows XP,但在所有
的Windows系統中都可以使用,需要gdiplus.dll支持。很久沒(méi)有寫(xiě)基于GDI的圖形程序了
,最近由于要編寫(xiě)一個(gè)小程序,才開(kāi)始關(guān)注這個(gè)東西,發(fā)現還是很好用的,因此參考了
msdn的一些章節,整理了一下,給尚未關(guān)注這個(gè)非常有用的軟件包的網(wǎng)友們一個(gè)淺淺的
印象。并呼吁大家徹底放棄GDI,轉向新的、功能強大的GDI+
概述
GDI+ 是 Microsoft? Windows? XP 操作系統的子系統,負責在屏幕和打印機上顯示信息
。顧名思義,GDI+ 是 GDI(Windows 早期版本提供的圖形設備接口)的后續版本。GDI
+ 是一種應用程序編程接口 (API),通過(guò)一套部署為托管代碼的類(lèi)來(lái)展現。這套類(lèi)被稱(chēng)
為 GDI+ 的“托管類(lèi)接口”。
應用程序的程序員可利用 GDI+ 這樣的圖形設備接口在屏幕或打印機上顯示信息,而不
需要考慮特定顯示設備的具體情況。應用程序的程序員調用 GDI+ 類(lèi)提供的方法,而這
些方法又反過(guò)來(lái)相應地調用特定的設備驅動(dòng)程序。GDI+ 將應用程序與圖形硬件隔離,而
正是這種隔離允許開(kāi)發(fā)人員創(chuàng )建設備無(wú)關(guān)的應用程序。
GDI+ 的三個(gè)組成部分
GDI+ 的服務(wù)分為以下三個(gè)大類(lèi):
二維矢量圖形
圖像處理
版式
二維矢量圖形
矢量圖形包括坐標系統中的系列點(diǎn)指定的繪圖基元(例如,直線(xiàn)、曲線(xiàn)和圖形)。例如
,直線(xiàn)可通過(guò)它的兩個(gè)端點(diǎn)來(lái)指定,而矩形可通過(guò)確定其左上角位置的點(diǎn)并給出其寬度
和高度的一對數字來(lái)指定。簡(jiǎn)單路徑可由通過(guò)直線(xiàn)連接的點(diǎn)的數組來(lái)指定。貝塞爾樣條
是由四個(gè)控制點(diǎn)指定的復雜曲線(xiàn)。
GDI+ 提供了存儲基元自身相關(guān)信息的類(lèi)(和結構)、存儲基元繪制方式相關(guān)信息的類(lèi),
以及實(shí)際進(jìn)行繪制的類(lèi)。例如,Rectangle 結構存儲矩形的位置和尺寸;Pen 類(lèi)存儲有
關(guān)線(xiàn)條顏色、線(xiàn)條粗細和線(xiàn)型的信息;而 Graphics 類(lèi)具有用于繪制直線(xiàn)、矩形、路徑
和其他圖形的方法。還有幾種 Brush 類(lèi),它們存儲有關(guān)如何使用顏色或圖案來(lái)填充封閉
圖形和路徑的信息。
您可以在圖元文件中記錄矢量圖像(圖形命令的序列)。GDI+ 提供了 Metafile 類(lèi),可
用于記錄、顯示和保存圖元文件。MetafileHeader 和 MetaHeader 類(lèi)允許您檢查圖元文
件頭中存儲的數據。
圖像處理
某些種類(lèi)的圖片很難或者根本無(wú)法用矢量圖形技術(shù)來(lái)顯示。例如,工具欄按鈕上的圖片
和顯示為圖標的圖片就難以指定為直線(xiàn)和曲線(xiàn)的集合。擁擠的棒球運動(dòng)場(chǎng)的高分辨率數
字照片會(huì )更難以使用矢量技術(shù)來(lái)制作。這種類(lèi)型的圖像可存儲為位圖,即代表屏幕上單
個(gè)點(diǎn)顏色的數字數組。GDI+ 提供了 Bitmap 類(lèi),可用于顯示、操作和保存位圖。
版式
版式關(guān)系到使用各種字體、字號和樣式來(lái)顯示文本。GDI+ 為這種復雜任務(wù)提供了大量的
支持。GDI+ 中的新功能之一是子像素消除鋸齒,它可以使文本在 LCD 屏幕上呈現時(shí)顯
得比較平滑。
基于類(lèi)的接口結構
GDI+ 的托管類(lèi)接口包含大約 60 個(gè)類(lèi)、50 個(gè)枚舉和 8 個(gè)結構。Graphics 類(lèi)是 GDI+
的核心功能,它是實(shí)際繪制直線(xiàn)、曲線(xiàn)、圖形、圖像和文本的類(lèi)。
許多類(lèi)與 Graphics 類(lèi)一起使用。例如,Graphics.DrawLine 方法接收 Pen 對象,該對
象中存有所要繪制的線(xiàn)條的屬性(顏色、寬度、虛線(xiàn)線(xiàn)型和外觀(guān))。Graphics.FillRec
tangle 方法可以接收指向 LinearGradientBrush 對象(它使用 Graphics 對象以漸變
色填充矩形)的指針。Font 和 StringFormat 對象影響 Graphics 對象繪制文本的方式
。Matrix 對象存儲并操作 Graphics 對象的全局變形,該對象用于旋轉、縮放和翻轉圖
像。
GDI+ 為組織圖形數據提供了幾種結構(例如,Rectangle、Point 和 Size)。而且,某
些類(lèi)的主要作用是結構化數據類(lèi)型。例如,BitmapData 類(lèi)是 Bitmap 類(lèi)的助手,而 Pa
thData 類(lèi)是 GraphicsPath 類(lèi)的助手。
GDI+ 定義了幾種枚舉,它們是相關(guān)常量的集合。例如,LineJoin 枚舉包含元素 Bevel
、Miter 和 Round,它們指定可用于連接兩個(gè)線(xiàn)條的樣式。
UNICODE
一些平時(shí)不喜歡使用UniCode的老兄們注意了,你會(huì )發(fā)現,GDI+只喜歡你使用UniCode,看
看下面的幾個(gè)函數聲明然后再想想你是不是應該轉換你的編程模式了……
Status Graphics::DrawString(
const WCHAR* string,
INT length,
const Font* font,
const RectF& layoutRect,
const StringFormat* stringFormat,
const Brush* brush
);
static Image* Image::FromFile(
const WCHAR* filename,
BOOL useEmbeddedColorManagement
);
名字空間
GDI+,將在名字空間Gdiplus下面進(jìn)行工作,因此,你的應用程序必須聲明
using namespace Gdiplus;
否則會(huì )使編程變得麻煩……
--
■■■■■■■■■■■■■■■■■■■■■■■■
這個(gè)世界只有10種人,懂二進(jìn)制的和不懂二進(jìn)制的
■■■■■■■■■■■■■■■■■■■■■■■■
jackyang@cs.zju since 2001
※ 來(lái)源:·浙江大學(xué)海納百川站 bbs.zju.edu.cn·[FROM: jackyang]
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。