Domanda C # .NET: Converti icona in byte [] e viceversa


Come si converte tra System.Drawing.Icon tipo e byte[]? Sto cercando qualcosa di semplice che possa (si spera) funzionare in .NET2.


13
2017-07-15 16:47


origine


risposte:


Vai via a MemoryStream, fondamentalmente:

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);
    }
}

(Nota storica: non ero sicuro se fosse o meno sicuro smaltire il flusso trasmesso al costruttore non è sicuro di farlo per Bitmapper esempio ... che si aggrappa al flusso e può leggerlo in seguito. Apparentemente va bene per Icon anche se. Vorrei che MSDN lo rendesse più chiaro ...)


22
2017-07-15 16:50



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

Ex (ci sono molti modi)

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

E:

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
2017-07-15 16:51



... E di nuovo indietro

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

La classe Icon legge dallo stream non appena viene costruita. Nessun danno nella chiusura della SM.


1
2017-07-15 16:53