当前位置:  编程技术>.net/c#/asp.net

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

    来源: 互联网  发布时间:2014-10-24

    本文导语:  功能需求: 1、把一张图片(png bmp jpeg bmp gif)转换为byte数组存放到数据库。 2、把从数据库读取的byte数组转换为Image对象,赋值给相应的控件显示。 3、从图片byte数组得到对应图片的格式,生成一张图片保存到磁盘上。 这里...

功能需求:

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;
        }


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Python3中内置类型bytes和str用法及byte和string之间各种编码转换
  • byte如何转换成String?
  • int型怎么转换为byte型?
  • 关于byte与int之间的转换
  • 如何将String转换为byte[]型,急用,立即送分
  • String怎么转换为byte[]?
  • 如何将String 转换为byte[] ?!
  • 请问如何将Byte型转换为int型?
  • 请问一个转换问题:如何将Byte[]转化为Sring类型
  • 有byte[]与int转换的好方法吗?
  • 怎样将short转换为两个byte输出?并可以被还原为short?
  • int型(or short)怎样转换为byte[]型啊?新手求救
  • 如何把bytes[]转换为String()
  • android byte[] 和short[]转换的方法代码
  • java命名空间java.lang类byte的类成员方法: byte定义及介绍
  • 如何让两个byte类型的变量a和b进行异或(^)操作,然后将结果存入另一个byte中?
  • java命名空间java.lang类byte的类成员方法: valueof定义及介绍
  • String(byte[] bytes, int offset, int length)括号里的参数是什么意思?
  • java命名空间javax.management.openmbean类simpletype<t>的类成员方法: byte定义及介绍
  • 如何把一个大的byte[]分割成小的byte[]???
  • java命名空间java.lang类byte的类成员方法: size定义及介绍
  • 如何把Date变成byte[](String也行),然后又能把byte[]变回一个Date??? 求救!!!
  • java命名空间javax.lang.model.type枚举typekind的类成员方法: byte定义及介绍
  • 如何把int变成4个byte,然后又能把这4个byte变回一个int??? 求救!!!
  • java命名空间java.lang类byte的类成员方法: compareto定义及介绍
  • 请教大侠:Additionally, kernel memory is not pageable. Therefore, every byte of memory you consume is one less byte of available
  • java命名空间java.lang类byte的类成员方法: bytevalue定义及介绍
  • 各位高手 linux 下编译 java 程序 出现 提示jc1 "Cannot allocate xxx bytes after allocating yyyy bytes"
  • java命名空间java.lang类byte的类成员方法: type定义及介绍
  • 简单问题在线给分:怎样将一个byte[]的值拷贝给另一个byte[]
  • java命名空间java.awt.image类databuffer的类成员方法: type_byte定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3