一、GDI+基礎
1、定義:
GDI+是一個庫,它提供了一個接口,此接口允許程序員編寫與打印機、監視器或文件等圖形設備進行交互的Windows和web圖形應用程序。
2、什麼是GDI+
是一組C++類,位於一個名爲Gdiplus.dll的類庫中。
3、受控代碼與不受控代碼
在.net framework中,編寫的受公共語言運行時(CLR)控制的代碼稱爲受控代碼,而不受其控制的稱爲不受控代碼;
4、在.NET Framework庫中提供的受控GDI+類是在System.Drawing名稱空間以及它的五個子名稱空間中定義的,這些子名稱空間爲:System.Drawing.Design,System.Drawing.Drawing2D,System.Drawing.Imaging,System.Drawing.Printing和System.Drawing.Text。
5、GDI+的功能分爲五類類:二維矢量圖形、圖形處理、版式、打印和設計。
6、在GDI+中,設備上下文的概念和設備上下文句柄被Graphics對象取代。Graphics類提供了繪製不同圖形對象的方法和屬性;
例如:
首先需要一個與窗體關聯的Graphics對象,通常在窗體的Form_Paint事件或者OnPaint方法中可以找到此對象。在得到了一個與窗體相關的Graphics對象後,可以調用它的繪製和填充方法來繪製和填充不同的圖形對象,如直線、矩形和曲線等。
//通過使用PaintEventArgs.Graphics得到一個與窗體相關聯的Graphics對象。然後,創建一個Pen對象和直線的起始點及結束點作爲參數,在窗體上繪製一條直線。
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
Pen pn = new Pen(Color.Red, 3);
g.DrawLine(pn, 20, 20, 200, 200);
}
7、System.Drawing名稱空間
類 | 描述 |
---|---|
Bitmap | 該類封裝了一個位圖,位圖是以像素格式存儲的圖像 |
Brush | 該類是一個不能直接實例化的抽象基類,提供了它的派生畫筆類所使用的功能,並且表示一個畫筆圖形對象,畫筆用於採用特定的顏色填充圖形的內部 |
Brushes | 該類使用所有的標準顏色來表示畫筆,對於每種標準的顏色,這個類都有一個靜態成員與之相對應,例如,Brushes.Blue表示一個藍色的畫筆 |
ColorConverter | 該類提供了將顏色從一種類型轉換爲另一種類型的方法和屬性 |
ColorTranslator | 該類提供了將顏色從一種類型轉換爲另一種類型的各種方法 |
Font | 該類提供了定義字體文本的格式、名稱、外觀、字號和樣式等的成員,還提供了從窗口句柄將Font對象創建到設備上下文或窗口句柄的方法 |
FontConverter | 該類提供了將字體從一種類型轉換爲另一種類型的成員 |
FontFamily | 該類定義了一組具有相似的基本設計但在樣式上有所不同的字體 |
Graphics | 該類封裝了繪製面的關鍵類,與許多其他的類一起提供了繪製和填充圖形對象的成員 |
lcon | 該類表示一個Windows圖標,提供了定義圖標的大小、寬度和高度的成員 |
IconCOnverter | 該類提供了將Icon對象從一種類型裝換爲另一種類型的成員 |
Image | 該類提供了定義圖像的大小、高度、寬度和格式的成員,還提供了從文件、窗口句柄或創建Image對象的方法,以及保存、旋轉和翻轉圖像的方法,其還是一個抽象的基類,通過他的派生類(Bitmap、Icon和Metafile等)可以使用它的功能 |
ImageAnimator | 該類提供了啓動和停止動畫的方法,以及更新具有基於時間的幀的圖像的幀的方法 |
ImageConverter | 該類提供了將Image對象從一中類型轉換爲另一種類型的成員 |
ImageFormatConverter | 該類定義了可以用將圖像從一種格式轉換爲另一種格式的成員 |
pen | 該類定義了一個具有指定顏色和寬度的鋼筆,鋼筆用於繪製直線、矩形、曲線或橢圓等圖形對象 |
PointConverter | 該類定義了可以用來將Point對象從一種類型轉換爲另一種類型的成員 |
RectangleConverter | 該類定義了可以用Rectangle對象從一種類型轉換爲另一種類型的成員 |
Region | 該類在GDI+中表示一個區域,此區域描述了一個圖形的內部 |
SizeCOnverter | 該類定義了將字號從一種類型轉換爲另一種類型的成員 |
SolidBrush | 該類繼承自Brush類,這個類定義了單一顏色的實心畫筆 |
StringFormat | 該類提供了定義文本格式(包括對齊方式、去首尾空白和行間距、顯示處理以及OpenType特性等)的成員 |
SystemBrushes | 該類定義了靜態的屬性,每個屬性都是一個具有Highlight、HighlightText或ActiveBorder等,window優先顯示元素的SolidBrush對象 |
SystemIcons | 該類定義了Windows系統圖標的靜態屬性 |
SystemPens | 該類定義了靜態的屬性,每個屬性都是一個具有Windows顯示元素的顏色和寬度爲1的Pen對象 |
TextureBrush | 該類繼承自Brush類,定義了一個將圖像作爲紋理的畫筆 |
ToolboxBitmapAttribute | 該類定義與特定組件關聯的圖像 |
8、System.Drawing.Design 名稱空間
從其名字可以看出 ,System.Drawing.Design 名稱空間提供了開發設計時控件 ( 例如自定義的工具箱項 、圖形編輯器和類型轉換器等) 的附加功能 。表 1.2 中簡要地描述了System.Drawing.Design 名稱空間中的類 。除表 1.2 中介紹的類之外,System.Drawing.Design 名稱空間還定義了一些接口 、委託 和枚舉 。表 1.3 列出了在此名稱空間中定義的接口 。
表 1.2 System.Drawing.Design 類
類 | 描述 |
---|---|
BitmapEditor | 該類是使用 “屬性” 窗口選擇位圖的用戶界面 |
CategoryN田neCollection | 該類是類別的集合 |
FontEditor | 該類是選擇和配置字體的 UI |
ImageEditor | 該類是在屬性窗口中選擇圖像的UI |
PaintValueEventArgs | 該類提供了 PaintValue 事件的數據 |
PropertyValue UIItem | 該類提供了有關屬性的屬性值 UI 的信息 |
ToolboxComponentsCreatedEventArgs | 該類提供了 ComponentsCreated 事件的數據 ,此事件在向工具箱添加組件時發生 |
ToolboxComponentsCreatingEventArgs | 該類提供了 ComponentsCreating 事件的數據 ,此事件在向工具箱添加組件時發生 |
Toolboxltem | 該類提供了工具箱項的一個基本的實現 |
ToolboxltemCollection | 該類是工具箱 頁的集合 |
UITypeEditor | 該類提供了可以用來設計值編輯器的基類 |
9 System.Drawing.Drawing2D 名稱空間
System.Drawing.Drawing2D 名稱空間定義了開發高級的二維和矢量圖形應用程序的功 能。此名稱雪間提供了圖形容器 、混合、高級畫筆 、矩陣和變形等的類 。表 1.4 簡要地描 述了這些類 。除表 1.4 中介紹的類之外System.Drawing.Drawing2D 名稱空間還提供了許多枚舉 。 我們將在後面章節的例子中使用這些枚舉時再對其進行介紹 。
表 1.4 System.Drawing.Drawing2D 類
類 | 描 述 |
---|---|
AdjustableArrowCap | 該類表示一個可調整的箭頭形狀的線帽 ,提供了定義要填寫的屬性以及設置箭頭線帽的高度和 寬度的成員 |
Blend | 漸變色混合用於提供圖形內部的光滑和陰影 ,混合圖案包含係數和圖案數組 ,這些數組定義了開 始顏色和結束顏色的位置以及顏色的百分比 c Blend 類定義了 個混合圖案 ,其使用 Linear GradientBrush 來填充圖形 。Factors 和 Positions 屬性分別表示混合係數的數組和漸變位置的數組 |
ColorBlend | 該類定義了在多色漸變中混合的顏色 ,Color 和 Position 屬性分別表示顏色數組和位置數組 |
CustomLineCap | 該類封裝了一個定製的 、用戶自定義的線帽 |
GraphicsContainer | 該類表示圖形容器的數據 |
Graphics.BeginContainer | 以及通過對 Graphics.End- Container 的調用創建的 |
GraphicsPath | 在 GDI+ 中,路徑是 系列相互連接的直線和曲線 。這個類提供了定義路徑的填充模式的屬性 和其他屬性 。該類還定義了向路徑添加圖形的方法 。例如AddArc 方法和 AddCurve 方法將分 別向路徑添加困弧和曲線 z 一些相關的方法如 Wrap、Transform 、Reverse 和 Reset 等 |
GraphicsPathlterator | 路徑可以包含子路徑 。該類提供了找到子路徑的個數並通過子路徑進行迭代的能力 。Count 和SubpathCount 分別返回了路徑中的點的個數和子路徑的個數 |
Graphics State | 該類表示 Graphics 對象的狀態 |
HatchBrush | 陰影畫筆是具有陰影樣式 、前景色和背景色的畫筆 。該類表示 GDI+ 中的陰影畫筆 |
LinearGradientBrush | 該類表示使用線性漸變的畫筆 |
Matrix | 該類封裝了一個表示幾何變形的 3×3 矩陣。該類定義了反轉 、增加、重置 、旋轉、縮放、剪切 和轉化矩陣的方法 |
PathData | 該類包含形式爲組成路徑的點和類型的數據 。這個類的 Points 屬性表示 個點的數組 ,Types屬性表示路徑中的點的類型 |
PathGradientBrush | 該類表示使用圖形路徑的畫筆 。PathGradientBrush 包含混合 、包裝、縮放和變形的方法和屬性 。 該類封裝 r 個使用漸變色填充 |
GraphicsPath | 對象的內部的 Brush 對象 |
RegionData | 該類表示由 Region 對象存儲的數據 。這個類的 Data 屬性表示形式爲字節數組的數據 |
10 System.Drawing.Imaging 名稱空間
System.Drawing 名稱空間中定義了基本的圖像處理功能 。System.Drawing.Imaging 名 稱空間則提供了高級圖像處理的功能 。在應用程序使用 System.Drawing.Imaging 名稱空間 中的類之前,必須先引用此名稱空間 。
表 1.5 簡要地描述了 System.Drawing.Imaging 名稱空間的類 。這些類及其用法將在第 8章中進行介紹。
表 1.5 System.Drawing.Imaging 類
類 | 描述 |
---|---|
BitmapData | 通常我們不希望加載和刷新位圖的所有數據 ,這是因爲渲染每個像素不僅是一個非常慢的過程 , 而且會消耗很多的系統資源 。由於有BitmapData 類以及它的LockBits 和 UnlockBits 方法的幫助 , 我們可以鎖定內存中所需的位圖數據並對其進行操作 ,而不用對所有的數據進行操作 |
ColorMap | 該類定義了顏色轉換的映射 。ColorMap 由ImageAttributes 類使用 |
ColorMatrix | 該類定義了包含 ARGB 空間的座標的 5x5 矩陣。ColorMatrix 由geAttributes 類使用 |
ColorPalette | 該類定義了 個組成顏色調色板的顏色的數組 |
ColorPalette | 由ImageAttribut的類使用 Encoder 該類表示一個編碼器 ,此編碼器表示一個標識圖像編碼器參數的全局惟→標識符 <GUID )。 |
Encoder | 由EncoderPararneter類使用Encoder Parameter該類是一個編碼器參數 ,用於設置特定種類的圖像的值 。該類在 Save 方法中是與EncoderParameter寫 一起使用的 |
Encoder Parameters | 該類是 Encoder Parameter 對象的數組 |
FrameDimension | 該類提供了獲取圖像的幀尺寸的屬性 |
ImageAttributes | 該類包含了有關在渲染期間如何操作圖像顏色的信息 ( 詳細信息請參見第 7章) |
ImageCodecinfo | 該類檢索有關己安裝的圖像編解碼器的信息 |
ImageFormat | 該類指定了圖像的格式 |
Metafile | 該類定義了 個圖形圖元文件 ,此文件包含形式爲可以記錄(構造) 和回放 (顯示) 的記錄的 圖形操作 |
11 System.Drawing.Printing 名稱空間
System.Drawing.Printing 名稱空間定義了 GDI+ 中與打印相關的類和類型 。在應用程序 使用此名稱空間的類之前 ,必須先包含這個名稱空間 。
表 1.6 簡要地討論了 System.Drawing.Printing 名稱空間所提供的類 。這些類及其用法 將在第 11 章中進行介紹。
12 System.Drawing.Text 名稱空間
System.Drawing.Text 名稱空間只包含一些與高級 GDI+ 版式功能相關的類 。在應用 程序使用此名稱空間的類之前 ,必須先包含這個名稱空間 。表 1.7 描述了這些類 :在第 5 章中將對這些類進行詳細的介紹 。
(說明:以上內容來自:《GDI+圖形程序設計》)