2011-09-19 75 views
2

有沒有辦法在Java中使用Graphics2D API在遠程java進程的畫面上繪製? 任何API來傳輸和反序列化繪畫說明?Java Graphics2D流?

或者我必須使用我自己的「api call」序列化/反序列化機制?

回答

2

這真的取決於你處理的媒體種類。如果你正在播放視頻,你使用的編解碼器可能有API來做到這一點,但你需要四處搜索找出。 Graphics2D實際上是用於更原始的繪畫操作,比如繪製形狀,渲染文本以​​及將圖像數據從一個地方複製到另一個地方。

如果您正在編寫自己的流式算法,那麼它可以像定義一個滿足您需要的PaintEvent類一樣簡單。 PaintEvent類的想法是它包含了要做什麼的說明。例如,如果您在遠程系統上繪製一個帶有無線電50的圓,則不是通過網絡傳輸像素數據,而是傳輸一條基本上說「跨半徑爲50的圓」的消息,並讓客戶把它放在一邊。

一類的paintEvent,我會想,會是這個樣子:

public class PaintEvent { 
    public static final int OPER_DRAW_CIRCLE = 0; 
    public static final int OPER_DRAW_RECT = 1; 
    public static final int OPER_DRAW_TEXT = 2; 
    ...etc... 

    int paintOperationID; 
    int[] paintDetails;   // where 'paintDetails' contains data such as a circle's radius, a rectangle's dimensions, the (x, y) location where to render text, etc. 
    java.awt.Color renderColor; 
    String text; 

    public PaintEvent(int paintOperationID, int[] paintDetails, Color renderColor, String text) { 
    ... 
    } 

} 

所以,這取決於什麼paintOperationID是,它會在paintDetails對待數據不同。除非是OPER_DRAW_TEXT操作,否則text字段將被忽略。

無論如何,這是一種方法。然後你就可以設計一個通信協議,從一個地方獲取數據。

+0

謝謝,我想過這種情況下,如果沒有任何其他解決方案。這個問題的解決方案非常簡單,我認爲任何人都已經準備好使用 - Graphics2d代理,IO /流,消息處理程序,連接到另一個graphics2d。 –

+0

但似乎我應該自己實現消息處理程序 –

+0

這就是我會推薦的。它不應該花很長時間,我懷疑如果其他人做了它,那是他們會發布的東西。對於很多2D圖形,Java2D並不是一個使用頻繁的庫。從這裏開始,Java中的2D圖形變得非常專業化(即遊戲圖形),並且擁有專用於應用程序空間的庫。 – jefflunt