C# byte數組與Image的相互轉換


功能需求:

1、把一張圖片(png bmp jpeg bmp gif)轉換為byte數組存放到數據庫。

2、把從數據庫讀取的byte數組轉換為Image對象,賦值給相應的控件顯示。

3、從圖片byte數組得到對應圖片的格式,生成一張圖片保存到磁盤上。

這里的Image是System.Drawing.Image。

以下三個函數分別實現了上述三個需求:

// Convert Image to Byte[]
        private byte[] ImageToByte(Image image)
        {
            ImageFormat format = image.RawFormat;
            using (MemoryStream ms = new MemoryStream())
            {
                if (format.Equals(ImageFormat.Jpeg))
                {
                    image.Save(ms, ImageFormat.Jpeg);
                }
                else if (format.Equals(ImageFormat.Png))
                {
                    image.Save(ms, ImageFormat.Png);
                }
                else if (format.Equals(ImageFormat.Bmp))
                {
                    image.Save(ms, ImageFormat.Bmp);
                }
                else if (format.Equals(ImageFormat.Gif))
                {
                    image.Save(ms, ImageFormat.Gif);
                }
                else if (format.Equals(ImageFormat.Icon))
                {
                    image.Save(ms, ImageFormat.Icon);
                }
                byte[] buffer = new byte[ms.Length];
                //Image.Save()會改變MemoryStream的Position,需要重新Seek到Begin
                ms.Seek(0, SeekOrigin.Begin);
                ms.Read(buffer, 0, buffer.Length);
                return buffer;
            }
        }

        // Convert Byte[] to Image
        private Image ByteToImage(byte[] buffer)
        {
            MemoryStream ms = new MemoryStream(buffer);
            Image image = System.Drawing.Image.FromStream(ms);
            return image;
        }

        // Convert Byte[] to a picture
        private string CreateImageFromByte(string fileName, byte[] buffer)
        {
            string file = fileName; //文件名(不包含擴展名)
            Image image = ByteToImage(buffer);
            ImageFormat format = image.RawFormat;
            if (format.Equals(ImageFormat.Jpeg))
            {
                file += ".jpeg";
            }
            else if (format.Equals(ImageFormat.Png))
            {
                file += ".png";
            }
            else if (format.Equals(ImageFormat.Bmp))
            {
                file += ".bmp";
            }
            else if (format.Equals(ImageFormat.Gif))
            {
                file += ".gif";
            }
            else if (format.Equals(ImageFormat.Icon))
            {
                file += ".icon";
            }
            //文件路徑目錄必須存在,否則先用Directory創建目錄
            File.WriteAllBytes(file, buffer);
            return file;
        }
View Code
//用Graphics.DrawImage() 來copy Image到一個新建立的Bitmap 對象然后多這個新的Image 執行Resize
// Convert Image to Byte[]
 private byte[] ImageToByte(Image image)
        {
            System.IO.MemoryStream Ms = new MemoryStream();
            Bitmap bmp = new Bitmap(image.Width, image.Height);
            Graphics g = Graphics.FromImage(bmp);
            g.DrawImage(image, new System.Drawing.Rectangle(0, 0, image.Width, image.Height));
            bmp.Save(Ms, image.RawFormat);
            
            byte[] byteImg = Ms.GetBuffer();
            bmp.Dispose();
            g.Dispose();
            Ms.Close();

            return  byteImg;
        }
解決A generic error occurred in GDI+的問題

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM