2011-05-30 67 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,而不必自己绘制它们。