標籤:
http://www.cnblogs.com/BLoodMaster/archive/2010/03/20/1690726.html
支援格式:BMP、GIF、JPEG、EXIF、PNG、TIFF、ICON、WMF、EMF等,幾乎涵蓋所有常用格式
映像類:
- Image類:Bitmap和Metafile的類提供功能的抽象基類。
- Metafile類:定義圖形圖元檔案,圖元檔案包含描述一系列圖形操作的記錄,這些操作可以被記錄(構造)和被回放(顯示)
- Bitmap類:封裝GDI+位元影像,此位元影像由圖形映像及其屬性的像素資料群組成,Bitmap是用於處理由像素資料定義的映像的對象。
常用屬性以及方法:
名稱 |
說明 |
公用屬性 |
Height |
擷取此Image對象的高度。 |
RawFormat |
擷取此Image對象的格式。 |
Size |
擷取此Image對象的寬度和高度。 |
Width |
擷取此Image對象的寬度。 |
公用方法 |
GetPixel |
擷取此Bitmap中指定像素的顏色。 |
MakeTransparent |
使預設的透明顏色對此Bitmap透明。 |
RotateFlip |
旋轉、翻轉或者同事旋轉和翻轉Image對象。 |
Save |
將Image對象以指定的格式儲存到指定的Stream對象。 |
SetPixel |
設定Bitmap對象中指定像素的顏色。 |
SetPropertyItem |
將指定的屬性項設定為指定的值。 |
SetResolution |
設定此Bitmap的解析度。 |
構造BitMap執行個體:
public Bitmap(Image ); //從現有映像建立,其中可換成等效參數 public Bitmap(int, int); public Bitmap(Image, bool );//bool:顏色校正標誌位 public Bitmap(Type , string );//type提取資源的類, string 資源名 public Bitmap(int , int , PixelFormat );// PixelFormat像素格式 枚舉 public Bitmap(int , int , Graphics);// Graphics設定解析度 public Bitmap(int , int , int stride, PixelFormat , IntPtr );// stride 指定相鄰掃描行開始處之間位元組位移量的整數。傳遞給此參數的值必須為4 的倍數。IntPtr指向包含像素資料的位元組數組的指標。 |
PixelFormat枚舉:
名稱 |
說明 |
DontCare = 0 |
沒有指定像素格式 |
Undefined = 0 |
未定義像素格式 |
Max = 15 |
此枚舉的最大值 |
Indexed = 65536 |
該像素資料包含色彩索引值,這意味著這些值是系統色彩表中顏色的索引,而不是單個顏色值。 |
Gdi = 131072 |
像素資料包含 GDI 顏色 |
Format16bppRgb555 = 135173 |
指定格式為每像素 16 位;紅色、綠色和藍色分量各使用 5 位。剩餘的 1 位未使用 |
Format16bppRgb565 = 135174 |
指定格式為每像素 16 位;紅色分量使用 5 位,綠色分量使用 6 位,藍色分量使用 5 位 |
Format24bppRgb = 137224 |
指定格式為每像素 24 位;紅色、綠色和藍色分量各使用 8 位 |
Format32bppRgb = 139273 |
指定格式為每像素 32 位;紅色、綠色和藍色分量各使用 8 位。剩餘的 8 位未使用 |
Format1bppIndexed = 196865 |
指定像素格式為每像素 1 位,並指定它使用索引顏色。因此顏色表中有兩種顏色 |
Format4bppIndexed = 197634 |
指定格式為每像素 4 位而且已建立索引 |
Format8bppIndexed = 198659 |
指定格式為每像素 8 位而且已建立索引。因此顏色表中有 256 種顏色 |
Alpha = 262144 |
像素資料包含沒有進行過自左乘的 alpha 值 |
Format16bppArgb1555 = 397319 |
像素格式為每像素 16 位。該顏色資訊指定 32,768 種色調,其中 5 位為紅色,5 位為綠色,5 位為藍色,1 位為 alpha |
PAlpha = 524288 |
像素格式包含自左乘的 alpha 值 |
Format32bppPArgb = 925707 |
指定格式為每像素 32 位;alpha、紅色、綠色和藍色分量各使用 8 位。根據 alpha 分量,對紅色、綠色和藍色分量進行自左乘 |
Extended = 1048576 |
保留 |
Format16bppGrayScale = 1052676 |
像素格式為每像素 16 位。該顏色資訊指定 65536 種灰色調 |
Format48bppRgb = 1060876 |
指定格式為每像素 48 位;紅色、綠色和藍色分量各使用 16 位 |
Format64bppPArgb = 1851406 |
指定格式為每像素 64 位元;alpha、紅色、綠色和藍色分量各使用 16 位。根據 alpha 分量,對紅色、綠色和藍色分量進行自左乘 |
Canonical = 2097152 |
預設像素格式,每像素 32 位。此格式指定 24 位色彩深度和一個 8 位 Alpha 色板 |
Format32bppArgb = 2498570 |
指定格式為每像素 32 位;alpha、紅色、綠色和藍色分量各使用 8 位 |
Format64bppArgb = 3424269 |
指定格式為每像素 64 位元;alpha、紅色、綠色和藍色分量各使用 16 位 |
映像的輸入:
- 表單設計時,在屬性對話方塊裡面的Image屬性設定
- 程式中對話方塊輸入
程式中對話方塊輸入:(樣本)
開啟對話方塊:
OpenFileDialog ofdlg = new OpenFileDialog(); ofdlg.Filter = "BMP File(*.bmp)|*.bmp"; if (ofdlg.ShowDialog() == DialogResult.OK) { Bitmap image = new Bitmap(ofdlg.FileName); } |
儲存對話方塊:
string str; Bitmap box1 = new Bitmap(pictureBox1.Image); SaveFileDialog sfdlg = new SaveFileDialog(); sfdlg.Filter = "bmp檔案(*.BMP)|*.BMP|All File(*.*)|*.*"; sfdlg.ShowDialog(); str = sfdlg.FileName; box1.Save(str); |
關於OpenFileDialog與SaveFileDialog的用法,可參考msdn相關章節。
映像格式的轉換:
Bitmap對象的Save方法中的第二個參數指定了映像儲存的格式。修改這個參數可對映像格式進行轉換。
位元影像支援的格式:Imaging.ImageFormat
名稱 |
說明 |
Bmp |
擷取位元影像映像格式(BMP)。 |
Emf |
擷取增強型Windows圖元檔案映像格式(EMF)。 |
Exif |
擷取可交換影像檔(Exif)格式。 |
Gif |
擷取圖形交換格式(GIF)映像格式。 |
Guid |
擷取表示此ImageForma 對象的Guid結構。 |
Icon |
擷取Windows表徵圖映像格式。 |
Jpeg |
擷取JPEG 格式(JPEG)映像格式。 |
MemoryBmp |
擷取記憶體位元影像映像格式。 |
Png |
擷取W3C可移植網狀圖形(PNG)映像格式。 |
Tiff |
擷取標籤影像檔格式(TIFF)映像格式。 |
Wmf |
擷取Windows圖元檔案(WMF)映像格式。 |
映像的拷貝與粘貼Clipboard:
常用方法:
名稱 |
說明 |
Clear |
從剪貼簿中移除所有資料。 |
ContainsData |
指示剪貼簿中是否存在指定格式的資料,或可轉換成此格式的資料。 |
ContainsImage |
指示剪貼簿中是否存在 Bitmap 格式或可轉換成此格式的資料。 |
ContainsText |
已重載。指示剪貼簿中是否存在文本資料。 |
GetData |
從剪貼簿中檢索指定格式的資料。 |
GetDataObject |
檢索當前位於系統剪貼簿中的資料。 |
GetFileDropList |
從剪貼簿中檢索檔案名稱的集合。 |
GetImage |
檢索剪貼簿上的映像。 |
GetText |
已重載。從剪貼簿中檢索文本資料。 |
SetAudio |
已重載。將WaveAudio格式的資料添加到剪貼簿中。 |
SetData |
將指定格式的資料添加到剪貼簿中。 |
SetDataObject |
已重載。將資料置於系統剪貼簿中。 |
SetImage |
將Bitmap格式的Image添加到剪貼簿中。 |
SetText |
已重載。將文本資料添加到剪貼簿中。 |
步驟:將資料置於剪貼簿中。從剪貼簿中檢索 資料。
- 將資料置於剪貼簿中
可以通過SetDataObject方法將資料置於剪貼簿中,SetDataObject方法有以下三種形式的定義:
public static void SetDataObject(object); public static void SetDataObject(object, bool );//bool 程式退出時,是否保留在剪貼簿中 public static void SetDataObject(object, bool , int , int);//嘗試次數及兩次嘗試之間的毫秒數 |
- 從剪貼簿中檢索資料
public static IDataObject GetDataObject(); |
映像的顏色處理:
調整解析度:所謂解析度就是指畫面的解析度,由多少像素構成,數值越大,映像也就越清晰。
演算法說明:將n*n解析度的映像變換為m*m解析度方法是將源映像分成n/m*n/m的子映像塊,然後將該n/m*n/m子映像塊的所有像素的顏色按F(i,j)的顏色值進行設定,達到降低解析度的目的。
調整色彩:
灰化:演算法說明:將彩色映像像素的顏色值分解為三基色R、G、B,求其和的平均值,然後使用SetPixel方法以該平均值參數產生映像。
灰階影像處理:根據特定的輸入輸出灰階轉換關係,增強了映像灰階,處理後映像的中等灰階值增大,映像變亮。
顏色名 |
R值 |
G值 |
B值 |
紅 |
255 |
0 |
0 |
藍 |
0 |
0 |
255 |
綠 |
0 |
255 |
0 |
白 |
255 |
255 |
255 |
黃 |
255 |
255 |
0 |
黑 |
0 |
0 |
0 |
青 |
0 |
255 |
255 |
品紅 |
255 |
0 |
255 |
顏色表:(RGB)
C#GDI+影像處理