¿Cómo se puede convertir entre System.Drawing.Icon
tipo y byte[]
? Estoy buscando algo simple que pueda (con suerte) funcionar en .NET2.C# .NET: Convertir icono a byte [] y viceversa
Respuesta
Usted ir a través de un MemoryStream
, básicamente:
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 histórica:. No estaba segura de si era o no seguro para desechar el flujo pasado al constructor Se no es . seguro hacerlo para Bitmap
, por ejemplo ... que se aferra a la corriente y puede leer de él más adelante Aparentemente está bien que Icon
aunque me gustaría MSDN hizo esto más claro ...)
Ex (hay múltiples maneras)
private byte[] GetBytes(Icon icon)
{
MemoryStream ms = new MemoryStream();
icon.Save(ms);
return ms.ToArray();
}
Y:
Bitmap bmpIcon = icon.ToBitmap();
using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
{
bmpIcon.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
return ms.ToArray();
}
No, no llame a 'GetBuffer', que bien puede tener 0s extraños al final. 'ToArray' es la llamada correcta para usar. –
Gracias, señaló. Realmente solo copié cosas del enlace. Hay múltiples soluciones en eso. 20 segundos en Google :) –
... Y de nuevo
public static Icon IconFromBytes(byte[] bytes) {
using(var ms = new MemoryStream(bytes)) {
return new Icon(ms);
}
}
La clase lee Icono de la corriente tan pronto como sea construido. Ningún daño al cerrar MS.
+1 para usar 'using' :) – Abel
-1 por no entender lo que hace Dispose(). –
¿Cuidar para elaborar? Estoy de acuerdo en que MemoryStream no necesita una eliminación porque no tiene recursos no administrados ... pero refuerza la idea de realizar una llamada cuando se implementa IDisposable. –
- 1. C# 4.0: Convertir PDF a byte [] y viceversa
- 2. Cadena a byte [] y viceversa?
- 3. Cómo convertir byte [] a base64 (y viceversa) en J2ME?
- 4. Convertir una imagen a base64 y viceversa
- 5. Java convertir int a hexadecimal y viceversa
- 6. zlib de C++ a C# (Cómo convertir byte [] a stream y stream to byte [])
- 7. ¿Cómo puedo convertir Xml a Json y viceversa en C#
- 8. Convertir píxeles a pulgadas y viceversa en C#
- 9. convertir fuente a cadena y viceversa
- 10. ¿Cómo convertir POJO a JSON y viceversa?
- 11. Convertir 0 a 1 y viceversa
- 12. entidades convertir HTML a Unicode y viceversa
- 13. C# Convertir Char a Byte (representación hexadecimal)
- 14. cómo convertir cadena a byte [] en C#
- 15. PHP a C# y viceversa
- 16. Convertir cadena JRuby a matriz de bytes Java, y viceversa
- 17. C# convierte entero a hexadecimal y viceversa
- 18. ¿Mejores formas de convertir XPS a PDF (y viceversa)?
- 19. Convertir corto a byte [] en Java
- 20. (Javascript) Convertir byte [] a imagen
- 21. Cómo convertir int [] a byte []
- 22. Convertir de BitArray a Byte
- 23. Cómo convertir byte [] a InputStream?
- 24. Convirtiendo matriz de bytes a cadena y viceversa en C#
- 25. Convertir codificación ascii a int y viceversa en python (rápidamente)
- 26. ¿Cómo convertir un número a un byte?
- 27. Biblioteca para convertir native2ascii y viceversa
- 28. Convertir DataTable en archivo XML y viceversa
- 29. cómo convertir formatos de fecha php a GMT y viceversa?
- 30. Convertir PDF de varias páginas a PNG y viceversa (Linux)
Vale la pena señalar que los bytes "guardados" aquí son exactamente los mismos que los bytes escritos en un archivo (por lo que incluye encabezado de archivo, cualquier compresión aplicable, etc.) no los bytes de la imagen en sí. –
Sí, podría convertirlo en un mapa de bits y extraer la matriz de píxeles si fuera necesario. –
Simplemente curioso, envolviste prolijamente 'MemoryStream' en un bloque de uso, ¿por qué no hiciste igual en el método inverso de 'BytesToIcon'? Ya no es necesario desechar el ms? – Abel