系列前面的兩篇文章寫的內容太簡單了,本文對我理解的GDI+做一個綜述,不再涉及代碼細節。
GDI+中共有三種坐標,全局坐標、頁面坐標和設備坐標。在GDI+的繪圖調用中,傳入的坐標位于全局坐標內,全局坐標經由全局變換轉換到頁面坐標,頁面坐標再通過頁面變換計算出設備坐標。
全局變換通過Graphics.Transform指定,其類型為Matrix。GDI+中的矩陣為3x3浮點矩陣,可以通過Matrix類的方法和屬性來修改全局變換,也可以通過Graphics類上的TranslateTransform等方法來設定。頁面變換通過Graphics類的PageUnit和PageScale來設定坐標單位和縮放倍數。
Point, Size, Rectangle是GDI+中常用的度量類型,并且都具有對應的float類型。Color則代表了32位A8R8G8B8的顏色。這一些都是基本的值類型,在實際使用的時候,要牢記其值類型的特征,類似o.Size.Width = 100的代碼是沒有作用的,因為.Width = 100是作用在了o.Size返回的臨時變量上了,對于o的狀態沒有任何影響。
GraphicsPath,Region, Image則是GDI+中的一些資源性的類型,在使用完成后要盡快Dispose。GraphicsPath是一系列連續的線,包含直線和曲線。Region則表示封閉的一個區域,這個區域的邊界可以由GraphicsPath來描述。Image表示一個圖形,其中表現像素組成的位圖的派生類為Bitmap,表現失量繪圖指令組成的圖形的派生類為Metafile。計算機屏幕最擅長展現兩維的數據,因此Rectangle視為最簡單的一種Region,并且應用面也非常廣泛,計算包含整個Region的Rectangle也是非常常見的一種操作。
Brush用來填充一個Region,填充時可以使用單色填充,可以使用紋理(圖片)填充,也可以使用線型填充和漸變填充,.NET中封充的GDI+提供了SolidBrush,TextureBrush,HatchBrush,LinearGradientBrush和PathGradientBrush類。Brush也是需要及時Dispose的,對于SolidBrush,可使用SystemBrushes和Brushes中的靜態屬性,獲取預定義的Brush對表,免去Dispose的麻煩。
Pen是用來畫線的,GDI+的線是有寬度的,也就有其內部區域,因此GDI+中的Pen需要一個Brush實例來構造。同樣SystemPens和Pens中提供了預定義的單色Pen實例。
此外Font對象用來實現GDI+中不同字體的輸出,Graphics類提供了一個MeasureString方法計算一段字符串繪制出來時占據的區域大小。
Graphics類提供了一系列Draw...方法,使用特定的Pen來繪制一定的形狀,Fill...系列則使用特定的Brush來填充指定區域。
Graphics的Clip屬性通過一個Region類的實例指定GDI+有效繪制區域,這是一個基礎信息,Graphics的屬性ClipBounds,IsClipEmpty,IsVisibleClipEmpty,VisibleClipBounds均基于Clip屬性,并且為只讀的。
CompositingQuality,InterpolationMode,PixelOffsetMode,SmoothingMode,TextRenderingHint用來控制繪制輸出質量,質量越高,速度越慢。CompositingMode用來啟用Alpha Blend,TextContrast控制文本輸出時的Gamma值,RenderingOrigin用來控制8bit/16bit色深時的色彩拌動和Hatch Brush的起始點。
這些內容對之后的Minesweeper內容足夠了,如果有問題,歡迎在評論中提出。
浙公網安備 33010602011771號