[C#] Image 與 byte[] 互轉
Introduction
有的時候我們必須將 Image 物件轉為 byte[] 陣列,也可能將 byte[] 轉換為 Image 物件,
例如 : 圖檔通常都是以二進位的方式存在於資料庫,當資料撈出來時,也許會需要先轉換成 Image 的格式,再做圖片匯製或是其他處理。
Example
修改 20100113
sample1 將 Byte 陣列轉換為 Image。
/// 將 Byte 陣列轉換為 Image。
/// </summary>
/// <param name="Buffer">Byte 陣列。</param>
public static Image BufferToImage(byte[] Buffer) {
if (Buffer == null || Buffer.Length == 0) { return null; }
byte[] data = null;
Image oImage = null;
Bitmap oBitmap = null;
//建立副本
data = (byte[])Buffer.Clone();
try {
MemoryStream oMemoryStream = new MemoryStream(Buffer);
//設定資料流位置
oMemoryStream.Position = 0;
oImage = System.Drawing.Image.FromStream(oMemoryStream);
//建立副本
oBitmap = new Bitmap(oImage);
}
catch {
throw;
}
//return oImage;
return oBitmap;
}
sample2 將 Image 轉換為 Byte 陣列。
/// 將 Image 轉換為 Byte 陣列。
/// </summary>
/// <param name="Image">Image 。</param>
/// <param name="imageFormat">指定影像格式。</param>
public static byte[] ImageToBuffer(Image Image, System.Drawing.Imaging.ImageFormat imageFormat) {
if (Image == null) { return null; }
byte[] data = null;
using (MemoryStream oMemoryStream = new MemoryStream()) {
//建立副本
using (Bitmap oBitmap = new Bitmap(Image)) {
//儲存圖片到 MemoryStream 物件,並且指定儲存影像之格式
oBitmap.Save(oMemoryStream, imageFormat);
//設定資料流位置
oMemoryStream.Position = 0;
//設定 buffer 長度
data = new byte[oMemoryStream.Length];
//將資料寫入 buffer
oMemoryStream.Read(data, 0, Convert.ToInt32(oMemoryStream.Length));
//將所有緩衝區的資料寫入資料流
oMemoryStream.Flush();
}
}
return data;
}
Link
三小俠 小弟獻醜,歡迎指教