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