我正在编写简单的C#应用程序来查看地图。地图是JPG图像,大小约为1000x1000或类似的东西,可以按比例调整大小。我有一组点协调(x,y)和名称。
Viewer是一个Windows窗体应用程序,其中包含控制面板和PictureBox。 PictureBox具有属性SizeBox=AutoSize
。
我使用这种方法将点放在地图上(PictureBox)。
Graphics g = Graphics.FromHwnd(pictureBox.Handle);
SolidBrush redBrush = new SolidBrush(Color.Red);
g.FillEllipse(redBrush, x, y, 7, 7);
滚动或调整表单大小后,所有点都不合适。如果我在Paint事件上画点,我的表现就会出现很大问题。 如何解决这个问题?
答案 0 :(得分:1)
为了获得更好的性能,请尝试仅绘制当前可见的内容。最佳做法是删除PictureBox并仅使用两个Scrollbars(或其他可以像PictureBox一样滚动的东西),并仅为可见的小部分绘制地图和点。在此之前,尝试在调整大小或滚动时将点绘制到PictureBox中,并检查可见区域内的点。
补充:如果您将元素绘制到jpg的副本并将其放入PictureBox中,那么它是否足够好?
答案 1 :(得分:0)
您应该能够将事件处理程序挂钩到PictureBox的各个变化点(您提到了滚动和调整大小)。然后,您可以将绘图代码放在从这些事件处理程序调用的方法中。
答案 2 :(得分:0)
WPF可能是更好的选择。它是硬件加速的,并将为您执行所有剪切和缩放转换(您只需设置适当的属性)。而且您应该能够使用WPF元素跟踪POI,而不必自己绘制它们。