C#GDI+影像處理

來源:互聯網
上載者:User

標籤:

http://www.cnblogs.com/BLoodMaster/archive/2010/03/20/1690726.html

支援格式:BMP、GIF、JPEG、EXIF、PNG、TIFF、ICON、WMF、EMF等,幾乎涵蓋所有常用格式

映像類:

  1. Image類:Bitmap和Metafile的類提供功能的抽象基類。
  2. Metafile類:定義圖形圖元檔案,圖元檔案包含描述一系列圖形操作的記錄,這些操作可以被記錄(構造)和被回放(顯示)
  3. 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 位

 

映像的輸入:

  1. 表單設計時,在屬性對話方塊裡面的Image屬性設定
  2. 程式中對話方塊輸入

 

程式中對話方塊輸入:(樣本)

開啟對話方塊:

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

已重載。將文本資料添加到剪貼簿中。

步驟:將資料置於剪貼簿中。從剪貼簿中檢索 資料。

  1. 將資料置於剪貼簿中

可以通過SetDataObject方法將資料置於剪貼簿中,SetDataObject方法有以下三種形式的定義:

public static void SetDataObject(object);

public static void SetDataObject(object, bool );//bool 程式退出時,是否保留在剪貼簿中

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

  1. 從剪貼簿中檢索資料

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 

255 

255 

255 

255 

255 

255 

255 

255 

255 

品紅

255 

255 

 

顏色表:(RGB)

C#GDI+影像處理

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.