2011-05-30 65 views
2

我正在編寫簡單的C#應用​​程序來查看地圖。地圖是JPG圖像,大小約爲1000x1000或類似的東西,可以按比例調整大小。我有一組協調點(x,y)和名稱。 Viewer是一個帶有控制面板和PictureBox的Windows窗體應用程序。 PictureBox有屬性SizeBox=AutoSize。 我使用這種方法將點放置到地圖上(PictureBox)。C#在可調整大小的圖片中繪製點

Graphics g = Graphics.FromHwnd(pictureBox.Handle); 
SolidBrush redBrush = new SolidBrush(Color.Red); 
g.FillEllipse(redBrush, x, y, 7, 7); 

滾動或調整表格的大小後,所有點都將消失。如果我在繪畫事件上畫點,我會遇到很大的性能問題。 如何解決這個問題?

+1

這是設計。我想你需要解決你的pref問題。 – 2011-05-30 14:42:51

回答

1

爲了獲得更好的性能,請嘗試僅繪製當前可見的內容。最佳做法是放下PictureBox並只使用兩個滾動條(或者其他可以像PictureBox一樣滾動的東西),然後繪製地圖和點僅用於可見的小部分。在做這些之前,請嘗試在調整大小或滾動時將點繪製到PictureBox中,並檢查哪些點位於可見區域內。

補充:如果您將元素繪製成JPG副本並將其放入PictureBox中,可能會不夠好?

0

您應該可以將事件處理程序掛接到PictureBox的各個更改點(您提到了滾動和調整大小)。然後,您可以將繪圖代碼放入這些事件處理程序調用的方法中。

0

WPF可能會是一個更好的選擇。它的硬件加速,並且會爲你執行所有剪切和縮放轉換(你只需設置適當的屬性)。而且你應該能夠使用WPF元素跟蹤POI,而不必自己繪製它們。