Tworzę aplikację do udostępniania pulpitu zdalnego, w której przechwytuję obraz pulpitu, kompresuję go i wysyłam do odbiornika. Aby skompresować obraz, muszę go przekonwertować na bajt [].
Obecnie używam tego:
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;
}
Ale nie podoba mi się to, ponieważ muszę zapisać go w ImageFormat, a to może również zużywać zasoby (spowolnienie), a także powodować różne wyniki kompresji. Czytałem o użyciu Marshal.Copy i memcpy, ale nie jestem w stanie tego zrobić zrozumieć ich.
Czy jest więc jakaś inna metoda osiągnięcia tego celu?
MemoryStream
; jest to zasób w pełni zarządzany, chyba że używasz go w zdalnej obsłudze. W obu tych przypadkach pozbycie się zasobów byłoby niewłaściwe.