Bitmap類

一.Bitmap類算法

Bitmap對象封裝了GDI+中的一個位圖,此位圖由圖形圖像及其屬性的像素數據組成.所以Bitmap是用於處理由像素數據定義的圖像的對象.該類的主要方法和屬性以下:windows

1. GetPixel方法和SetPixel方法:獲取和設置一個圖像的指定像素的顏色.數組

2. PixelFormat屬性:返回圖像的像素格式.數據結構

3. Palette屬性:獲取和設置圖像所使用的顏色調色板.ide

4. Height Width屬性:返回圖像的高度和寬度.函數

5. LockBits方法和UnlockBits方法:分別鎖定和解鎖系統內存中的位圖像素.在基於像素點的圖像處理方法中使用LockBits和UnlockBits是一個很好的方式,這兩種方法能夠使咱們指定像素的範圍來控制位圖的任意一部分,從而消除了經過循環對位圖的像素逐個進行處理,每調用LockBits以後都應該調用一次UnlockBits.this

二.BitmapData類spa

BitmapData對象指定了位圖的屬性.net

1. Height屬性:被鎖定位圖的高度.code

2. Width屬性:被鎖定位圖的高度.

3. PixelFormat屬性:數據的實際像素格式.

4. Scan0屬性:被鎖定數組的首字節地址,若是整個圖像被鎖定,則是圖像的第一個字節地址.

5. Stride屬性:步幅,也稱爲掃描寬度. 

如上圖所示,數組的長度並不必定等於圖像像素數組的長度,還有一部分未用區域,這涉及到位圖的數據結構,系統要保證每行的字節數必須爲4的倍數.

三.Graphics類

Graphics對象是GDI+的關鍵所在,許多對象都是由Graphics類表示的,該類定義了繪製和填充圖形對象的方法和屬性,一個應用程序只要須要進行繪製或着色,它就必須使用Graphics對象.

四.Image類

  這個類提供了位圖和元文件操做的函數.Image類被聲明爲abstract,也就是說Image類不能實例化對象,而只能作爲一個基類

1.FromFile方法:它根據輸入的文件名產生一個Image對象,它有兩種函數形式:

public static Image FromFile(string filename);
public static Image FromFile(string filename, bool useEmbeddedColorManagement);

2.FromHBitmap方法:它從一個windows句柄處建立一個bitmap對象,它也包括兩種函數形式:

public static bitmap fromhbitmap(intptr hbitmap);
public static bitmap fromhbitmap(intptr hbitmap, intptr hpalette);

3. FromStream方法:從一個數據流中建立一個image對象,它包含三種函數形式:

public static image fromstream(stream stream);
public static image fromstream(stream stream, bool useembeddedcolormanagement);
fromstream(stream stream, bool useembeddedcolormanagement, bool validateimagedata); 

有了上面的瞭解,咱們即可以開始利用C#作圖像處理,下面介紹幾種方法:

一.   打開、保存、顯示圖像        

privateBitmap srcBitmap = null;
privateBitmap showBitmap = null;
//打開文件
privatevoid menuFileOpen_Click(object sender, EventArgs e)
{
   OpenFileDialog openFileDialog = newOpenFileDialog();
   openFileDialog.Filter = @"Bitmap文件(*.bmp)|*.bmp|Jpeg文件(*.jpg)|*.jpg|全部合適文件(*.bmp,*.jpg)|*.bmp;*.jpg";
   openFileDialog.FilterIndex = 3;
   openFileDialog.RestoreDirectory = true;
   if (DialogResult.OK == openFileDialog.ShowDialog())
   {
      srcBitmap = (Bitmap)Bitmap.FromFile(openFileDialog.FileName, false);
      showBitmap = srcBitmap;
      this.AutoScroll = true;
      this.AutoScrollMinSize = newSize((int)(showBitmap.Width), (int)(showBitmap.Height));
      this.Invalidate();
   }
}
//保存圖像文件
privatevoid menuFileSave_Click(object sender, EventArgs e)
{
   if (showBitmap != null)
   {
      SaveFileDialog saveFileDialog = newSaveFileDialog();
      saveFileDialog.Filter = @"Bitmap文件(*.bmp)|*.bmp|Jpeg文件(*.jpg)|*.jpg|全部合適文件(*.bmp,*.jpg)|*.bmp;*.jpg";
      saveFileDialog.FilterIndex = 3;
      saveFileDialog.RestoreDirectory = true;
      if (DialogResult.OK == saveFileDialog.ShowDialog())
      {   
          ImageFormat format = ImageFormat.Jpeg;
          switch (Path.GetExtension(saveFileDialog.FileName).ToLower())
          {
              case".jpg":
                  format = ImageFormat.Jpeg;
                  break;
              case".bmp":
                  format = ImageFormat.Bmp;
                  break;
              default:
                  MessageBox.Show(this, "Unsupported image format was specified", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                  return;
           }
           try
           {
              showBitmap.Save(saveFileDialog.FileName,format );
           }
           catch (Exception)
           {
              MessageBox.Show(this, "Failed writing image file", "Error",MessageBoxButtons.OK, MessageBoxIcon.Error);
           }
       }
  }
}
相關文章
相關標籤/搜索