我在WPF中製作了一個路徑規劃器程序,我需要顯示一張具有數萬條邊的圖形對象的地圖。如果我也想要與這個地圖交互(如放大,移動,選擇邊緣),那麼繪製這些線條的最佳選擇是什麼?我試過的所有選項都證明了它的渲染性能非常低。在WPF中以數千行快速繪製地圖
回答
你可以使用Shape,這些對象的交互特別簡單,但是如果你處理的是上千條邊,我建議使用DrawingVisual類,這個可視對象可以用來在屏幕上呈現矢量圖形,和它的RenderOpen方法。我有一個similar problem給你,我已經提高了我的應用程序的性能,使用DrawingContext繪製我的邊緣。
要放大,您必須使用轉換,尤其是ScaleTrasnform,並將轉換應用於面板或形狀。
DrawingVisual不提供事件handlig,因此如果使用Shape可以使用事件與邊緣進行交互,則使用DrawingVisual需要實現Hit-Testing。
如果您必須使用WPF,那麼請查看DrawingVisual類。這可以訪問低級繪圖原語,從而提高性能。但是,在處理較低級別的對象時,您必須處理焦點和自己測試等事情。看看這裏的MSDN條目上DrawingVisuals:
http://msdn.microsoft.com/en-us/library/system.windows.media.drawingvisual.aspx http://msdn.microsoft.com/en-us/library/ms742254.aspx
爲了提高繪圖性能,你必須避免同時渲染所有行。即使使用較低級別的視覺效果,您也無法提高您的表現。
你必須遵循這些東西:
- 如果您有一層這些線路再拆不同layers.You該層可與高速公路線的基礎上,將它們分割,高速公路,地方道路,街道等
- 你必須找到機制來空間索引這些圖層。通過使用空間索引,您可以根據其邊界框爲您的線索引。
- 獲取線路邊界框的基礎上,只有上呈現更高的縮放級別,其位於該邊框
- 渲染重要線路的線(公路,高速公路),然後逐漸顯示出其他線路(低重要性道路,街道)放大地圖。
感謝您的想法。我會嘗試實現不同的層次。 – 2012-04-17 13:44:16
- 1. 在WPF中繪製地圖
- 2. WPF快速方法在UI中繪製圖像
- 3. 在DotNET中進行超快速繪製
- 4. 在Android中快速繪製
- 5. 快速WPF圖像控制
- 6. 用ggplot繪製數千行
- 7. 在UIView上快速繪製UIImage圖像
- 8. WPF:複雜圖像的快速繪製/縮放
- 9. 如何在WPF中的Canvas上繪製數千個點?
- 10. 無法快速繪製以跟上touchesMoved?
- 11. 用世界地圖在世界地圖上快速繪製座標
- 12. 在pygame中繪製快速線條
- 13. 如何在WPF中繪製函數圖?
- 14. qDeclarativeItem上的快速繪圖
- 15. 如何使用android在OGLES2.0中快速繪製圖像?
- 16. Python和Matplotlib:在同一個圖上快速繪製多個圖
- 17. 更快地繪製縮放的位圖
- 18. 是否有快速的方式來繪製WPF文本
- 19. 快速複製一次文件數千次
- 20. 使用NSBezierPath繪製至少4000段的快速繪圖
- 21. 在滾動窗口中繪製快速傳入數據
- 22. 在BufferedImage中快速加載和繪製RGB數據
- 23. WPF中的位圖繪製
- 24. 在matlab中繪製數據地圖
- 25. 如何使用繪圖或ggplot2在R中快速繪製多條線
- 26. 在Flash中渲染數千個bmp的快速方法?
- 27. 在數千個文件中迭代速度更快
- 28. 繪製地圖在地圖控制
- 29. ggplot2:快速熱圖繪圖,重塑?
- 30. 在Android畫布或OpenGL上繪製位圖速度更快
謝謝,我想我會用DrawingVisual去。 – 2012-04-17 13:44:52