Estoy creando una aplicación para compartir escritorio remoto en la que capturo una imagen del escritorio, la comprimo y la envío al receptor. Para comprimir la imagen necesito convertirla en un byte [].
Actualmente estoy usando esto:
public byte[] imageToByteArray(System.Drawing.Image imageIn)
{
MemoryStream ms = new MemoryStream();
imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);
return ms.ToArray();
}
public Image byteArrayToImage(byte[] byteArrayIn)
{
MemoryStream ms = new MemoryStream(byteArrayIn);
Image returnImage = Image.FromStream(ms);
return returnImage;
}
Pero no me gusta porque tengo que guardarlo en un ImageFormat y eso también puede consumir recursos (ralentizar) y producir diferentes resultados de compresión. He leído sobre el uso de Marshal.Copy y memcpy pero no puedo entiéndelos.
Entonces, ¿hay algún otro método para lograr este objetivo?
MemoryStream
; es un recurso completamente administrado, a menos que lo esté usando de forma remota. En ambos casos, sería inapropiado deshacerse del recurso.