2011-07-17 75 views
-1


我想在C#中創建一個屏幕共享程序(使用TCP)
我嗅探了網絡,發現最有效的方法是將大量的屏幕截圖從客戶端發送到服務器。
關鍵是 - 我怎樣才能將位圖壓縮爲Jpeg - 在服務器上接收它並再次解壓縮到位圖(這樣我就可以在一個表單中顯示它)?
我使用JpegBitmapEncoder沒有運氣試過了,這裏是我的代碼:
C# - 如何使用Jpeg壓縮圖像併發送到服務器?

 Bitmap screen = TakeScreenshot(); 
     MemoryStream ms = new MemoryStream(); 
     byte[] Bytes = BmpToBytes_Unsafe(screen); 
     ms.Write(Bytes, 0, Bytes.Length); 
     Jpeg = new JpegBitmapEncoder(); 
     Jpeg.Frames.Add(BitmapFrame.Create(ms)); 
     Jpeg.QualityLevel = 40; 
     Jpeg.Save(ms); 
     BinaryReader br = new BinaryReader(ms); 
     SendMessage(br.ReadBytes((int)ms.Length)); 

它拋出在Jpeg.Frames.Add(BitmapFrame.Create(ms));
No imaging component suitable to complete this operation was found.
一個NotSupportedException異常所以我需要一種方法來將位圖轉換爲JPEG,然後字節[],然後通過TCP發送它。
另一方面,做相反的事情。有什麼建議麼 ?
謝謝。

+5

這實際上是效率最低的方法。看看RFB(遠程幀緩衝)協議 –

回答

4

JPEG是爲照片設計的,而不是屏幕截圖。此外,大部分屏幕變化都不會更好,只需發送更改的部分,而只是在屏幕大部分發生更改時才顯示全屏。

除非你只是爲了好玩而做這件事,否則你會錯過這一切。 VNC已經這麼做了多年,源代碼是免費的,所以你可以看看如何完成。

+0

http://www.realvnc.com/products/viewerplus/index.html這是如何免費的 –

+1

TightVNC是開源的。 –

+0

我會檢查出來 –