Wykonuję aplikację do udostępniania pulpitu zdalnego, w której przechwytuję obraz pulpitu i kompresuję go i wysyłam do odbiorcy. Aby skompresować obraz, muszę go przekonwertować na bajt [].Najszybszy sposób konwertowania obrazu na tablicę bajtową
Obecnie używam to:
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, bo muszę zapisać go w ImageFormat i które mogą także korzystać z zasobów (Slow Down), jak również produkować inną kompresją Wyniki. Przeczytałem na Marshal.Copy i memcpy, ale nie jestem w stanie ich zrozumieć.
Czy jest jakaś inna metoda osiągnięcia tego celu?
zarówno MemoryStream Image mieć metodę zbyć, upewnij się, że je usuwałeś, ponieważ może to spowodować MemoryLeaks. – abc123
@ abc123: Nie musisz pozbywać się 'MemoryStream'; jest to całkowicie zarządzany zasób, chyba że używasz go do zdalnego zarządzania. W obu tych przypadkach niewłaściwe byłoby dysponowanie zasobami. –
@JonSkeet ciekawe, czy zrobiłeś test porównawczy? aby zobaczyć szybkość, z jaką .net zwalnia obiekt? Wiem, że istnieje podobny argument dla DataTable, a jednak zauważalna jest różnica w szybkości, z jaką GarbageCollector zbiera pamięć przydzieloną, gdy używane jest utylizowanie. – abc123