代码之家  ›  专栏  ›  技术社区  ›  emptyset

C#.NET:将图标转换为字节[],然后再转换回来

  •  13
  • emptyset  · 技术社区  · 14 年前

    一个人如何在两者之间转换 System.Drawing.Icon 类型和 byte[] ? 我正在寻找一些简单的东西,可以(希望)在.NET2工作。

    3 回复  |  直到 14 年前
        1
  •  30
  •   Jon Skeet    14 年前

    你通过一个 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能说得更清楚……)

        2
  •  2
  •   Lasse Espeholt    14 年前

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

    例如(有多种方法)

    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();
    }
    
        3
  •  1
  •   BC.    14 年前

    ... 又回来了

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

    Icon类在流构造完成后立即从流中读取数据。关闭MS没有坏处。