• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#二进制图片串互转C#byte数组与Image的相互转换

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
 

功能需求:

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

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

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

这里的Image是System.Drawing.Image。

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

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

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Drawing;
  4 using System.Drawing.Imaging;
  5 using System.IO;
  6 using System.Linq;
  7 using System.Text;
  8 
  9 namespace NetUtilityLib
 10 {
 11     public static class ImageHelper
 12     {
 13         /// <summary>
 14         /// Convert Image to Byte[]
 15         /// </summary>
 16         /// <param name="image"></param>
 17         /// <returns></returns>
 18         public static byte[] ImageToBytes(Image image)
 19         {
 20             ImageFormat format = image.RawFormat;
 21             using (MemoryStream ms = new MemoryStream())
 22             {
 23                 if (format.Equals(ImageFormat.Jpeg))
 24                 {
 25                     image.Save(ms, ImageFormat.Jpeg);
 26                 }
 27                 else if (format.Equals(ImageFormat.Png))
 28                 {
 29                     image.Save(ms, ImageFormat.Png);
 30                 }
 31                 else if (format.Equals(ImageFormat.Bmp))
 32                 {
 33                     image.Save(ms, ImageFormat.Bmp);
 34                 }
 35                 else if (format.Equals(ImageFormat.Gif))
 36                 {
 37                     image.Save(ms, ImageFormat.Gif);
 38                 }
 39                 else if (format.Equals(ImageFormat.Icon))
 40                 {
 41                     image.Save(ms, ImageFormat.Icon);
 42                 }
 43                 byte[] buffer = new byte[ms.Length];
 44                 //Image.Save()会改变MemoryStream的Position,需要重新Seek到Begin
 45                 ms.Seek(0, SeekOrigin.Begin);
 46                 ms.Read(buffer, 0, buffer.Length);
 47                 return buffer;
 48             }
 49         }
 50 
 51         /// <summary>
 52         /// Convert Byte[] to Image
 53         /// </summary>
 54         /// <param name="buffer"></param>
 55         /// <returns></returns>
 56         public static Image BytesToImage(byte[] buffer)
 57         {
 58             MemoryStream ms = new MemoryStream(buffer);
 59             Image image = System.Drawing.Image.FromStream(ms);
 60             return image;
 61         }
 62 
 63         /// <summary>
 64         /// Convert Byte[] to a picture and Store it in file
 65         /// </summary>
 66         /// <param name="fileName"></param>
 67         /// <param name="buffer"></param>
 68         /// <returns></returns>
 69         public static string CreateImageFromBytes(string fileName, byte[] buffer)
 70         {
 71             string file = fileName;
 72             Image image = BytesToImage(buffer);
 73             ImageFormat format = image.RawFormat;
 74             if (format.Equals(ImageFormat.Jpeg))
 75             {
 76                 file += ".jpeg";
 77             }
 78             else if (format.Equals(ImageFormat.Png))
 79             {
 80                 file += ".png";
 81             }
 82             else if (format.Equals(ImageFormat.Bmp))
 83             {
 84                 file += ".bmp";
 85             }
 86             else if (format.Equals(ImageFormat.Gif))
 87             {
 88                 file += ".gif";
 89             }
 90             else if (format.Equals(ImageFormat.Icon))
 91             {
 92                 file += ".icon";
 93             }
 94             System.IO.FileInfo info = new System.IO.FileInfo(file);
 95             System.IO.Directory.CreateDirectory(info.Directory.FullName);
 96             File.WriteAllBytes(file, buffer);
 97             return file;
 98         }
 99     }
100 }

 

功能需求:

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

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

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

这里的Image是System.Drawing.Image。

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

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

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Drawing;
  4 using System.Drawing.Imaging;
  5 using System.IO;
  6 using System.Linq;
  7 using System.Text;
  8 
  9 namespace NetUtilityLib
 10 {
 11     public static class ImageHelper
 12     {
 13         /// <summary>
 14         /// Convert Image to Byte[]
 15         /// </summary>
 16         /// <param name="image"></param>
 17         /// <returns></returns>
 18         public static byte[] ImageToBytes(Image image)
 19         {
 20             ImageFormat format = image.RawFormat;
 21             using (MemoryStream ms = new MemoryStream())
 22             {
 23                 if (format.Equals(ImageFormat.Jpeg))
 24                 {
 25                     image.Save(ms, ImageFormat.Jpeg);
 26                 }
 27                 else if (format.Equals(ImageFormat.Png))
 28                 {
 29                     image.Save(ms, ImageFormat.Png);
 30                 }
 31                 else if (format.Equals(ImageFormat.Bmp))
 32                 {
 33                     image.Save(ms, ImageFormat.Bmp);
 34                 }
 35                 else if (format.Equals(ImageFormat.Gif))
 36                 {
 37                     image.Save(ms, ImageFormat.Gif);
 38                 }
 39                 else if (format.Equals(ImageFormat.Icon))
 40                 {
 41                     image.Save(ms, ImageFormat.Icon);
 42                 }
 43                 byte[] buffer = new byte[ms.Length];
 44                 //Image.Save()会改变MemoryStream的Position,需要重新Seek到Begin
 45                 ms.Seek(0, SeekOrigin.Begin);
 46                 ms.Read(buffer, 0, buffer.Length);
 47                 return buffer;
 48             }
 49         }
 50 
 51         /// <summary>
 52         /// Convert Byte[] to Image
 53         /// </summary>
 54         /// <param name="buffer"></param>
 55         /// <returns></returns>
 56         public static Image BytesToImage(byte[] buffer)
 57         {
 58             MemoryStream ms = new MemoryStream(buffer);
 59             Image image = System.Drawing.Image.FromStream(ms);
 60             return image;
 61         }
 62 
 63         /// <summary>
 64         /// Convert Byte[] to a picture and Store it in file
 65         /// </summary>
 66         /// <param name="fileName"></param>
 67         /// <param name="buffer"></param>
 68         /// <returns></returns>
 69         public static string CreateImageFromBytes(string fileName, byte[] buffer)
 70         {
 71             string file = fileName;
 72             Image image = BytesToImage(buffer);
 73             ImageFormat format = image.RawFormat;
 74             if (format.Equals(ImageFormat.Jpeg))
 75             {
 76                 file += ".jpeg";
 77             }
 78             else if (format.Equals(ImageFormat.Png))
 79             {
 80                 file += ".png";
 81             }
 82             else if (format.Equals(ImageFormat.Bmp))
 83             {
 84                 file += ".bmp";
 85             }
 86             else if (format.Equals(ImageFormat.Gif))
 87             {
 88                 file += ".gif";
 89             }
 90             else if (format.Equals(ImageFormat.Icon))
 91             {
 92                 file += ".icon";
 93             }
 94             System.IO.FileInfo info = new System.IO.FileInfo(file);
 95             System.IO.Directory.CreateDirectory(info.Directory.FullName);
 96             File.WriteAllBytes(file, buffer);
 97             return file;
 98         }
 99     }
100 }

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
.NET (C#) Internals: Delegates (2)发布时间:2022-07-14
下一篇:
C#中创建、打开、读取、写入、保存Excel的一般性代码[转]发布时间:2022-07-14
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap