簡體   English   中英

通過LAN傳輸位圖對象的最佳方法

[英]Best way to transfer bitmap object over lan

我需要最快的方法在C#中通過局域網傳輸位圖對象。

阿卜杜勒·哈利克(Abdul Khaliq)

“最佳”一詞充其量是一個主觀術語:-)

如果要談論速度,則取決於位圖的大小。 如果局域網以100Mbps的速度運行,則每10MB的文件大約需要1秒左右的時間。 對於小文件,只需按原樣傳輸即可。 在某些文件大小下,將文件壓縮,傳輸並在另一端解壓縮將變得值得,這僅僅是因為CPU咕than聲比網絡咕unt聲要快。

但是我認為您會談論相當大的文件,以使這些額外的編碼值得。

更新:

既然您談論的是屏幕捕獲幀,那么我們的分辨率為1280x1024,即32bpp。 全屏顯示將占用5M的帶寬,該帶寬應可在一秒鍾之內在100Mbps LAN上傳輸(其他網絡流量允許)。 我認為,嘗試進一步加快速度是不值得的,因為壓縮的開銷將超過節省的時間。

如果您要進行視頻傳輸,那是另一回事。 這樣一來,您就不會為每一幀發送一個全新的圖像-您可以計算出增量並僅傳輸該信息,這取決於屏幕通常每幀只改變一點的事實。

這取決於您要使用圖像的用途。 一次截圖,只發送二進制信息。 除此之外,您需要向我們提供更多詳細信息。

對於視頻傳輸,我們實際上已經在不同的壓縮方法上做了一些工作。

您可能要看的最簡單的方法是將屏幕分成一個(例如)16x16矩陣,並僅傳輸更改的元素。

因此,例如,每個幀將包含一個256位的位掩碼,指示哪些元素已更改。 然后,該位掩碼后面是元素本身。

該算法意味着最小的幀增量為32字節(如果屏幕未更改)。 最大大小僅比全屏轉儲大32個字節。

我們使用的其他方法之一是簡單地存儲已更改的最左上角和最右下角像素位置,並將這兩個值以及它們所包圍的整個矩形一起傳輸。

毫無疑問,您還可以使用其他方法,甚至可以逐幀動態選擇方法以確保最小增量大小。

這里有一個錯誤在.NET V2.0 SP1()和.NET 3.5版本CopyFromScreen的。 它會泄漏一個句柄,過一會兒您將耗盡可用的句柄並收到類似這樣的怪異錯誤消息。 您不能在當前狀態下使用它,請通過P / Invoking Windows API函數檢查此線程以尋求另一種方式。

鏈接上也有很好的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM