因为编程中经常遇到要将图片或文件转换为byte[]数组的,但是思路比较混乱,感觉有很多方法,又不知道具体有些什么方法及各方法之间的区别.好像有用过memorystream,Binarybyte什么之类的,但是很模糊.不清楚各自的用法和区别.我希望大家能介绍下大家知道的几种方法将"e:\image.ico"转换成字节数组.
要求:
(1)介绍一下该方法,并要写出如何使用该方法
(2)介绍任意几种已提供方法之间的区别(比如介绍1楼和2楼所给方法的区别)给分:每介绍一种方法给予10分(如果两种方法相同,根据使用方法的详细与否给分.如果均相同则根据早到早得的方法给分);
每介绍一次几种方法间的区别,给10分(如果已有人介绍过,则根据详细与否给分)注:如果按照以上方法给分后分数仍有剩余,则平分剩余的分数.如果分数不够,我会另外加分.当然大家也可以推荐下其它文章或链接什么的.以上给分方法按照具体情况具体处理.最终解释权归:stg609.

解决方案 »

  1.   

    Byte[] signMeaningImage ;
    FileStream stream = null;
    string dev = System.Environment.SystemDirectory.ToString();
    rtbSignMeaning.SaveFile( dev.Substring(0,3)+"Sign.rtf" );
    stream = new FileStream(dev.Substring(0,3)+"Sign.rtf", FileMode.Open, FileAccess.Read); int size = Convert.ToInt32(stream.Length);
    signMeaningImage = new Byte[size];
    stream.Read(signMeaningImage, 0, size);
    stream.Close();
    最终解释权归:viki117  
    哎,我郁闷啊
      

  2.   

    是对象的序列化问题.
    http://www.idcnews.net/html/edu/net/20071224/12351.html
    http://www.chenjiliang.com/Article/View.aspx?ArticleID=2410&TypeID=84
    http://i.yiqifei.com/s.sams/articles/325.html
      

  3.   

    http://www.cnblogs.com/shouzheng/archive/2008/03/05/901866.html
      

  4.   

    public byte[] GetImageBytes(string strImageName)
    {
    string GetUrlPath = GetImages(strImageName);
    ImageClass ic=new ImageClass();
    FileStream fs = new FileStream(GetUrlPath, FileMode.Open, FileAccess.Read);
    Byte[] img= new Byte[fs.Length];
    try
    {
    fs.Read(img, 0, Convert.ToInt32(fs.Length));
    }
    catch(Exception ex)
    {
    Debug.WriteLine(ex.Message+ex.StackTrace);
    }
    fs.Close(); 
    ic.myImage=img;
    BinaryFormatter bf = new BinaryFormatter();
    MemoryStream ms = new MemoryStream();
    bf.Serialize(ms,ic);
    return ms.ToArray();

      

  5.   

    大概归纳下(本人愚见):
    viki117 提供的代码是通过filestream的read方法将文件读到数组中xray2005 在vikill7的基础上加上了BinaryFormatter和MemoryStream,最后返回一个数组.
    但是为什么要再通过
    BinaryFormatter bf = new BinaryFormatter(); 
    MemoryStream ms = new MemoryStream(); 
    bf.Serialize(ms,ic); 
    return ms.ToArray(); 
    返回数组,而不是直接返回img呢?另外很感谢Kshatriya提供的链接.大家还有什么其它方法或什么的没?
      

  6.   

    你看下这篇文章对不对:http://www.netcsharp.cn/showtopic-318.aspx
      

  7.   


                Image img = Image.FromFile(@"e:\image.ico");
                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                img.Save(ms, img.RawFormat);            byte bytes = ms.GetBuffer();
      

  8.   

    17:13分了,差不多要去吃饭了,在这之前再来捧捧贴.嘿嘿感谢netcsharp提供链接,你所提供的链接其实和Kshatriya提供的类似,都是关于序列化和反序列化的文章.大概归纳下(本人愚见): 
    (1)我的问题并不就是序列化和反序列化的问题.应该说序列化和反序列化只是其中一种方法.(2)duping9626 的方法和前面几种有点不同,主要是通过memorystrem将文件保存到内存中,然后得到从内在流中取出byte数组另提几点意见:
    (1)大家如果能赋上点说明注释,那我看起来就更方便了,嘿嘿.
    (2)大家也可以谈谈几种用法之前的区别.大家多多捧场哦!如果还有什么方法,尽管提出来.
      

  9.   

    参考: http://topic.csdn.net/u/20080405/14/7847b513-0ec7-46e9-a51d-d2f483b40aa9.html
      

  10.   

    看样子,序列化和反序列化深得人心呀.
    自我感觉:
    序列化和反序列化对于要求能"从数据->文件,并能从文件->数据"的情况能处理的很好.大家还有其它方法的吗?