Как конвертировать между типом System.Drawing.Icon
и byte[]
? Я ищу что-то простое, которое может (надеюсь) работать в .NET2.
С#.NET: конвертировать значок в байт [] и обратно
Ответ 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 сделал это яснее...)
Ответ 2
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();
}
Ответ 3
... И снова
public static Icon IconFromBytes(byte[] bytes) {
using(var ms = new MemoryStream(bytes)) {
return new Icon(ms);
}
}
Класс Icon читается из потока, как только он будет создан. Нет вреда при закрытии MS.