Подтвердить что ты не робот

С#.NET: конвертировать значок в байт [] и обратно

Как конвертировать между типом System.Drawing.Icon и byte[]? Я ищу что-то простое, которое может (надеюсь) работать в .NET2.

4b9b3361

Ответ 1

Вы проходите через 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 сделал это яснее...)

Ответ 3

... И снова

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

Класс Icon читается из потока, как только он будет создан. Нет вреда при закрытии MS.