2010-08-27 100 views
0

想法: 我想使電子黑板像實時電子黑板。許多用戶在屏幕上都有一塊電路板,並且可以同時畫出畫面,電路板也會更新。電子黑板C#

實現: 我多用戶插座的服務器,多數民衆贊成允許聊天(黑板會有新的功能),我需要當一個用戶提請SMTH的BORAD應該更新其他用戶(可能是它應該是序列化和發送或其他人)。

問題: 我該怎麼發送這張圖片?我想我需要發送不完整的圖像,但只能協調,或者你的建議?

更新:我發現,在.net中存在InkCanvas這正是我需要的,但如何從它發送的圖像,是問題

UPDATE:在InkCanvas圖像被表示爲Stroke對象,StrokeCollection類有一個序列化圖像的Save()方法。解決方案之一:)

回答

1

IMO,首先您需要使用圖形命名空間讓用戶在可能的面板上繪畫或者其他東西。與接下來的內容相比,我認爲這不是那麼困難。信息的傳遞。正如你已經知道如何傳輸數據(套接字),你的下一個問題是什麼傳輸。發送一個完整的圖像可以工作,但會浪費網絡帶寬,而且效率會非常低。所以座標是你的最佳選擇

http://www.bobpowell.net/coordinatesystems.htm 

http://www.java2s.com/Tutorial/VB/0300__2D-Graphics/Drawlineusingfloatcoordinates.htm 

這兩個鏈接提供瞭如何使用座標來繪製的東西。傳輸信息的方式可能是XML或您自己的編碼機制來編碼X1,Y1到X2,Y2座標。

繪製直線(或基本形狀)時捕捉座標應該很容易,但我不知道如何在使用徒手畫時執行此操作。

最後,您應該有一種機制,確保聊天室中的每個人在繪製東西時都能正確地獲取座標。

UPDATE: 關於您的寫意畫的問題,這些鏈接將幫助您

http://www.codeproject.com/KB/GDI-plus/Freehand_Drawing.aspx

http://www.c-sharpcorner.com/forums/ShowMessages.aspx?ThreadID=88543

http://msdn.microsoft.com/en-us/library/system.drawing.drawing2d.graphicspath.aspx

這個鏈接看起來非常有前途,因爲它是由使用的白板應用2個用戶...多花點功夫,也許你可以讓它適用於任何數量的用戶:)

4

是的,你應該只發送每一行的座標(因爲鼠標繪圖是大量的點對點線),因此你應該發送每個這些到所有的客戶端,當用戶繪製新鮮玩意。

+0

但是用戶不僅可以繪製線條,如果他繪製了曲線的座標將是什麼? – Sergey 2010-08-27 09:46:06

+0

以簡單的方式,如果想要完美,曲線可以是一系列線或貝塞爾曲線。 – kenny 2010-08-27 10:20:24

+0

曲線=起點,終點,以及圓應該多大 – 2010-08-27 11:21:20