Estou fazendo um aplicativo de compartilhamento de área de trabalho remota em que capturo uma imagem da área de trabalho e a comprimo e envio para o receptor. Para compactar a imagem, preciso convertê-la em um byte [].
Atualmente estou usando este:
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;
}
Mas eu não gosto porque tenho que salvá-lo em um ImageFormat e isso também pode usar recursos (Slow Down), bem como produzir resultados de compactação diferentes. Eu li sobre como usar Marshal.Copy e memcpy, mas não consigo compreendê-los.
Então, existe algum outro método para atingir esse objetivo?
MemoryStream
; é um recurso totalmente gerenciado, a menos que você o esteja usando em comunicação remota. Em ambos os casos, seria inapropriado dispor do recurso.