C# byte数组与Image的相互转换

来源:互联网 发布:.儿童编程小游戏 编辑:程序博客网 时间:2024/05/13 06:01

功能需求:

1、把一张图片(png bmp jpeg bmp gif)转换为byte数组存放到数据库。

2、把从数据库读取的byte数组转换为Image对象,赋值给相应的控件显示。

3、从图片byte数组得到对应图片的格式,生成一张图片保存到磁盘上。

这里的Image是System.Drawing.Image。

         //Get an image from file        Image image = Image.FromFile("D:\\test.jpg");
        Bitmap bitmap = new Bitmap("D:\\test.jpg");

以下三个函数分别实现了上述三个需求:

复制代码
using System;using System.Collections.Generic;using System.Drawing;using System.Drawing.Imaging;using System.IO;using System.Linq;using System.Text;namespace NetUtilityLib{    public static class ImageHelper    {        /// <summary>        /// Convert Image to Byte[]        /// </summary>        /// <param name="image"></param>        /// <returns></returns>        public static byte[] ImageToBytes(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;            }        }        /// <summary>        /// Convert Byte[] to Image        /// </summary>        /// <param name="buffer"></param>        /// <returns></returns>        public static Image BytesToImage(byte[] buffer)        {            MemoryStream ms = new MemoryStream(buffer);            Image image = System.Drawing.Image.FromStream(ms);            return image;        }        /// <summary>        /// Convert Byte[] to a picture and Store it in file        /// </summary>        /// <param name="fileName"></param>        /// <param name="buffer"></param>        /// <returns></returns>        public static string CreateImageFromBytes(string fileName, byte[] buffer)        {            string file = fileName;            Image image = BytesToImage(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";            }            System.IO.FileInfo info = new System.IO.FileInfo(file);            System.IO.Directory.CreateDirectory(info.Directory.FullName);            File.WriteAllBytes(file, buffer);            return file;        }    }}
复制代码