我在製作遠程桌面共享應用程序,在該應用程序中捕獲桌面圖像並壓縮它並將其發送到接收器。爲了壓縮圖像,我需要將它轉換爲byte []。將圖像轉換爲字節數組的最快方法
目前我使用此:
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和圖像具有Dispose方法是有用的,確保你正在處理它們,因爲這會導致MemoryLeaks。 – abc123
@ abc123:你不需要處理一個'MemoryStream';它是一個完全託管的資源,除非您在遠程處理中使用它。在這兩種情況下,處置資源都是不恰當的。 –
@JonSkeet有趣,你有沒有做過一個基準?查看.net釋放對象的速度?我知道DataTable有類似的參數,但GarbageCollector收集使用dispose時分配的內存的速度有明顯的差異。 – abc123