免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
返回列表 回復 發帖

Image 與 byte[] 互轉 C#

原文處

Introduction
有的時候我們必須將 Image 物件轉為 byte[] 陣列,也可能將 byte[] 轉換為 Image 物件,
例如 : 圖檔通常都是以二進位的方式存在於資料庫,當資料撈出來時,也許會需要先轉換成 Image 的格式,再做圖片匯製或是其他處理。

Example
修改 20100113
sample1 將 Byte 陣列轉換為 Image。
view source
print?

01/// <summary>

02        /// 將 Byte 陣列轉換為 Image。

03        /// </summary>

04        /// <param name="Buffer">Byte 陣列。</param>        

05        public static Image BufferToImage(byte[] Buffer) {

06            if (Buffer == null || Buffer.Length == 0) { return null; }

07            byte[] data = null;

08            Image oImage = null;

09            Bitmap oBitmap = null;

10            //建立副本

11            data = (byte[])Buffer.Clone();

12            try {

13                MemoryStream oMemoryStream = new MemoryStream(Buffer);

14                //設定資料流位置

15                oMemoryStream.Position = 0;

16                oImage = System.Drawing.Image.FromStream(oMemoryStream);

17                //建立副本

18                oBitmap = new Bitmap(oImage);

19            }

20            catch {

21                throw;

22            }

23            //return oImage;

24            return oBitmap;

25        }





sample2 將 Image 轉換為 Byte 陣列。
view source
print?

01/// <summary>

02        /// 將 Image 轉換為 Byte 陣列。

03        /// </summary>

04        /// <param name="Image">Image 。</param>

05        /// <param name="imageFormat">指定影像格式。</param>        

06        public static byte[] ImageToBuffer(Image Image, System.Drawing.Imaging.ImageFormat imageFormat) {

07            if (Image == null) { return null; }

08            byte[] data = null;

09            using (MemoryStream oMemoryStream = new MemoryStream()) {

10                //建立副本

11                using (Bitmap oBitmap = new Bitmap(Image)) {

12                    //儲存圖片到 MemoryStream 物件,並且指定儲存影像之格式

13                    oBitmap.Save(oMemoryStream, imageFormat);

14                    //設定資料流位置

15                    oMemoryStream.Position = 0;

16                    //設定 buffer 長度

17                    data = new byte[oMemoryStream.Length];

18                    //將資料寫入 buffer

19                    oMemoryStream.Read(data, 0, Convert.ToInt32(oMemoryStream.Length));

20                    //將所有緩衝區的資料寫入資料流

21                    oMemoryStream.Flush();

22                }

23            }

24            return data;

25        }
返回列表