//需要引入的命名空间
using System;
using System.IO;
using System.Drawing;
using System.Runtime.Serialization.Formatters.Binary;
//引入供序列化Image对象使用

//以下为转换方法

//将Image转换为byte[]
public byte[] ConvertImage(Image image)
{
     FileStream fs=new FileStream("imagetemp",FileMode.Create,FileAccess.Write,FileShare.None);
     BinaryFormatter bf = new BinaryFormatter();
     bf.Serialize(fs,(object)image);
     fs.Close();
     fs=new FileStream("imagetemp",FileMode.Open,FileAccess.Read,FileShare.None);
     byte[] bytes = new byte[fs.Length];
     fs.Read(bytes,0,(int)fs.Length);
     fs.Close();
     return bytes;
}

//将byte[]转换为Image
public Image ReadImage(byte[] bytes)
{
  FileStream fs=new FileStream("imagetemp1",FileMode.Create,FileAccess.Write,FileShare.None);
  foreach(byte a in bytes)
  {
    fs.WriteByte(a);
  }
     fs.Close();
     fs=new FileStream("imagetemp1",FileMode.Open,FileAccess.Read,FileShare.None);
     BinaryFormatter bf = new BinaryFormatter();
     object obj=bf.Deserialize(fs);   
  fs.Close(); 
  return (Image)obj;
}

搞到三点多,终于行了,5555,终于可以睡觉咧!!!
第一次玩文件流,感觉很模糊,希望有高手能帮偶优化精简一下,感激不尽!!!


/////今天早上重新看了一下,对此做出第一次修改,如下:


/// <summary>
/// 将byte[]转换为Image
/// </summary>
/// <param name="bytes">字节数组</param>
/// <returns>Image</returns>

public Image ReadImage(byte[] bytes)
{
     MemoryStream ms=new MemoryStream(bytes,0,bytes.Length);
     BinaryFormatter bf = new BinaryFormatter();
     object obj=bf.Deserialize(ms);   
  ms.Close(); 
  return (Image)obj;
}
/// <summary>
/// 将Image转换为byte[]
/// </summary>
/// <param name="image">Image</param>
/// <returns>byte[]</returns>

public byte[] ConvertImage(Image image)
{
     MemoryStream ms=new MemoryStream();
     BinaryFormatter bf = new BinaryFormatter();
     bf.Serialize(ms,(object)image);
     ms.Close();
     return ms.ToArray();
}

http://blog.csdn.net/freehul/archive/2005/01/19/258787.aspx

在CodeProject上看的文章,没有什么技术含量,纯属练习E文,让大家见笑了,有翻译的不恰当的地方也请大家批评指正。

原文链接:http://www.codeproject.com/useritems/ImageConverter.asp

翻译如下:

最近我一直在找System.Drawing.Image与Byte[]  array 互相转换的类,然后在google上搜索了很多资料用我认为最快的方式写了一个类并且共享给社区的朋友。

我写的这个类叫ImageConverter.cs  他有两个方法

第一个方法:Image 转换为 byte[]数组

public byte[] imageToByteArray(System.Drawing.Image imageIn)
{
 MemoryStream ms 
= new MemoryStream();
 imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);
 
return  ms.ToArray();
}

该方法用System.Drawing.Image.Save方法把图片存为 memorystream.,然后内存流用MemryStrea类的ToArray()方法返回一个byte 数组

第二个方法:
byte[]数组转换为 Image

public Image byteArrayToImage(byte[] byteArrayIn)
{
     MemoryStream ms 
= new MemoryStream(byteArrayIn);
     Image returnImage 
= Image.FromStream(ms);
     
return returnImage;
}

该方法使用Image类的Image.FromStream方法通过由byte数组参数创建的MemoryStream对象生成一个Image,并返回该image对象。

我刚好用这个方法以通过转换为byte数组的方式把图片转换传给一个web service,反之亦然。

附全部代码如下:

using System;
using System.Drawing;
using System.IO;
using System.Collections;

    
/// <summary>
    
/// Description of ImageConverter.
    
/// </summary>
    public class ImageConverter
    {
        
public ImageConverter()
        {
        }
        
        
public byte[] imageToByteArray(System.Drawing.Image imageIn)
        {
            MemoryStream ms 
= new MemoryStream();
            imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);
            
return  ms.ToArray();
        }
        
        
public Image byteArrayToImage(byte[] byteArrayIn)
        {
            MemoryStream ms 
= new MemoryStream(byteArrayIn);
            Image returnImage 
= Image.FromStream(ms);
            
return returnImage;
    
        }

    
public static void Main()
        {

        }
        
    }

注:真的很短的文章,虽然自己明白意思,可是真要翻译的通顺真难啊。
http://www.cnblogs.com/billow/archive/2006/12/09/587446.html

posted on 2007-03-22 12:51  mbskys  阅读(2861)  评论(0)    收藏  举报