2015-05-03 47 views
0

我有一段代碼,需要藉助成千上萬行(6000和50000之間)。的Java 2D的drawLine慢長行

,不相關的錯誤,我後來固定的,暴露的一些有趣的事情;即當這些線條非常長(比如說30k像素)時,drawLine函數佔用了我編碼時間的95%,而線條只有1000個像素長度,而只佔用15%的時間。

的線是相同的顏色,固定的寬度(1像素)

爲什麼長行吸引這麼慢?我有什麼選擇來加速這一點,而不僅僅是長線,有沒有提示可以使用的提示?我已經運行這個線程。

+1

你可以畫線的背緩衝(使用'BufferedImage'),但是這可能不是解決問題。如果不知道實際物理繪圖過程的基本實現,就不可能知道。接下來的問題可能是,爲什麼你需要這麼長的時間? – MadProgrammer

+0

@MadProgrammer通常我不(不30K),但我仍然需要藉助很長的線(大型網絡的可視化),但是,我確實需要繪製是在較大的網絡幾千排長隊,如果我能在平均情況下,每條線都有小幅改進,這將是巨大的。奇怪的是,繪製線條(甚至是「快速」線條)比構建網絡的組合時間花費更長的時間,發現它的結構並運行佈局算法。 –

+0

YakumoYukari給出了很好的建議:如果你的任何線段在你的顯示視口之外,那可能會損害性能。在繪圖前剪切絕對可以幫助。否則:你可能想考慮一個不同的圖形庫,例如[拼裝(http://jogamp.org/jogl/www/)或[LWJGL(http://www.lwjgl.org/) – FoggyDay

回答

1

我相信java drawline函數,當你畫一條線進入NEW領域(I.E.它只渲染一個300x300的區域,但你畫出一條直線到200,500)時,它必須將所有這些像素初始化爲可繪製區域。

下面是一個類似的答案片段:(使用JComponent中的getVisibleRect()方法或圖形g.getClip().getBounds()方法)

「我建議你來計算繪製區域的可見部分與僅對該區域限制你的畫。

這小小的優化可以加速比組件的時代畫如果真的是很大(例如具有10000x10000像素組成的區域)。」

+0

有趣的是,這種情況下的線條都是從圓的兩端開始的,所以矩形的邊界不會改變。 –