Я делаю приложение для совместного использования удаленного рабочего стола, в котором я захватываю изображение рабочего стола, сжимаю его и отправляю получателю. Чтобы сжать изображение, мне нужно преобразовать его в байт [].
В настоящее время я использую это:
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;
}
Но мне это не нравится, потому что мне нужно сохранить его в ImageFormat, и это может также использовать ресурсы (замедлить), а также давать разные результаты сжатия. Я читал об использовании Marshal.Copy и memcpy, но не могу понять их.
Так есть ли другой способ достичь этой цели?
MemoryStream
; это полностью управляемый ресурс, если вы не используете его для удаленного взаимодействия. В обоих этих случаях было бы неуместно избавляться от ресурса.