C#.NET:将Icon转换为byte []然后再返回

时间:2010-07-15 16:47:13

标签: c# .net

如何在System.Drawing.Icon类型和byte[]之间进行转换?我正在寻找一些可以(希望)在.NET2中运行的简单东西。

3 个答案:

答案 0 :(得分:23)

你通过MemoryStream,基本上是:

public static byte[] IconToBytes(Icon icon)
{
    using (MemoryStream ms = new MemoryStream())
    {
        icon.Save(ms);
        return ms.ToArray();
    }
}

public static Icon BytesToIcon(byte[] bytes)
{
    using (MemoryStream ms = new MemoryStream(bytes))
    {
        return new Icon(ms);
    }
}

(历史记录:我不确定处理传递给构造函数的流是否安全。对于Bitmap来说, 是不安全的,例如......它保留在流上并且可以稍后从中读取。显然它对Icon是可以的。我希望MSDN更清楚......)

答案 1 :(得分:2)

请参阅: http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/1551fd3b-02b6-4479-852a-dfea4b610c35

Ex(有多种方式)

private byte[] GetBytes( Icon icon )
{
    MemoryStream ms = new MemoryStream();
    icon.Save( ms );
    return ms.ToArray();
}

Bitmap bmpIcon = icon.ToBitmap();

using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
{
    bmpIcon.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);        
    return ms.ToArray();
}

答案 2 :(得分:1)

......又回来了

public static Icon IconFromBytes(byte[] bytes) {
     using(var ms = new MemoryStream(bytes)) {
          return new Icon(ms);
     }
}

Icon类在构建后立即从流中读取。关闭MS没有坏处。