C#GDI+圖像處理

支持格式:BMP、GIF、JPEG、EXIF、PNG、TIFF、ICON、WMF、EMF等,幾乎涵蓋全部經常使用格式 算法

圖像類: 數組

  1. Image類:Bitmap和Metafile的類提供功能的抽象基類。
  2. Metafile類:定義圖形圖元文件,圖元文件包含描述一系列圖形操做的記錄,這些操做能夠被記錄(構造)和被回放(顯示)
  3. Bitmap類:封裝GDI+位圖,此位圖由圖形圖像及其屬性的像素數據組成,Bitmap是用於處理由像素數據定義的圖像的對象。

經常使用屬性以及方法: 網絡

名稱ide

說明ui

公共屬性spa

Height 設計

獲取此Image對象的高度。指針

RawFormat orm

獲取此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 位

 

圖像的輸入:

  1. 窗體設計時,在屬性對話框裏面的Image屬性設置
  2. 程序中對話框輸入

 

程序中對話框輸入:(示例)

打開對話框:

OpenFileDialog ofdlg = newOpenFileDialog();

            ofdlg.Filter = "BMP File(*.bmp)|*.bmp";

if (ofdlg.ShowDialog() == DialogResult.OK)

            {

Bitmap image = newBitmap(ofdlg.FileName);

            }

 

保存對話框:

string str;

Bitmap box1 = newBitmap(pictureBox1.Image);

SaveFileDialog sfdlg = newSaveFileDialog();

            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)圖像格式。

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

已重載。將文本數據添加到剪貼板中。

步驟:將數據置於剪貼板中。從剪貼板中檢索  數據。

  1. 將數據置於剪貼板中

能夠經過SetDataObject方法將數據置於剪貼板中,SetDataObject方法有如下三種形式的定義:

publicstaticvoid SetDataObject(object);  

publicstaticvoid SetDataObject(object, bool );//bool 程序退出時,是否保留在剪貼板中

publicstaticvoid SetDataObject(object, bool , int , int);//嘗試次數及兩次嘗試之間的毫秒數

  1. 從剪貼板中檢索數據

publicstaticIDataObject 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)

相關文章
相關標籤/搜索