由於很多時候在存取圖片時

需要透過Byte[]來做存取或編輯

這時就會需要用到Image轉Byte或是Byte轉Image的功能

最近看到的兩個現成的轉換方法

撿到寶似的快點記錄下來XD

 

1.將 Image 轉換為 Byte 陣列

   1: using System.IO;
   2: using System.Drawing;
   3:  
   4: /// 將 Image 轉換為 Byte 陣列。
   5: /// 參數1:Image 。
   6: /// 參數2:指定影像格式。
   7: public static byte[] ImageToBuffer(Image Image, System.Drawing.Imaging.ImageFormat imageFormat)
   8: {
   9:     if (Image == null) { return null; }
  10:     byte[] data = null;
  11:     using (MemoryStream oMemoryStream = new MemoryStream())
  12:     {
  13:         //建立副本
  14:         using (Bitmap oBitmap = new Bitmap(Image))
  15:         {
  16:             //儲存圖片到 MemoryStream 物件,並且指定儲存影像之格式
  17:             oBitmap.Save(oMemoryStream, imageFormat);
  18:             //設定資料流位置
  19:             oMemoryStream.Position = 0;
  20:             //設定 buffer 長度
  21:             data = new byte[oMemoryStream.Length];
  22:             //將資料寫入 buffer
  23:             oMemoryStream.Read(data, 0, Convert.ToInt32(oMemoryStream.Length));
  24:             //將所有緩衝區的資料寫入資料流
  25:             oMemoryStream.Flush();
  26:         }
  27:     }
  28:     return data;
  29: }

 

2.將 Byte 陣列 轉換為 Image

   1: using System.IO;
   2: using System.Drawing;
   3:  
   4: public static Image BufferToImage(byte[] Buffer)
   5: {
   6:     if (Buffer == null || Buffer.Length == 0) { return null; }
   7:     byte[] data = null;
   8:     Image oImage = null;
   9:     
  10:     //建立副本
  11:     data = (byte[])Buffer.Clone();
  12:     try
  13:     {
  14:         MemoryStream oMemoryStream = new MemoryStream(Buffer);
  15:         //設定資料流位置
  16:         oMemoryStream.Position = 0;
  17:         oImage = System.Drawing.Image.FromStream(oMemoryStream);
  18:     }
  19:     catch
  20:     {
  21:         throw;
  22:     }
  23:     
  24:     return oImage;
  25: }

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 酸酸 的頭像
    酸酸

    酸酸的Coding Style

    酸酸 發表在 痞客邦 留言(0) 人氣()