【问题标题】:C# draw points in resizable pictureC# 在可调整大小的图片中绘制点
【发布时间】:2011-05-30 23:51:50
【问题描述】:

我正在编写用于查看地图的简单 C# 应用程序。地图是大小约为 1000x1000 或类似大小的 JPG 图像,可以按比例调整大小。我有一组点坐标(x,y)和名称。 Viewer 是一个带有控制面板和 PictureBox 的 Windows 窗体应用程序。 PictureBox 具有属性SizeBox=AutoSize。 我使用这种方法在地图上放置点(PictureBox)。

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

滚动或调整表单大小后,所有点都消失了。如果我在 Paint 事件上画点,我的性能会有很大的问题。 如何解决这个问题?

【问题讨论】:

  • 这是设计使然。我想你需要解决你的偏好问题。

标签: c# drawing


【解决方案1】:

为了获得更好的性能,请尝试仅绘制当前可见的内容。最佳做法是删除 PictureBox 并仅使用两个滚动条(或其他可以像 PictureBox 一样滚动的东西)并仅为可见的小部分绘制地图和点。在此之前,请尝试在调整大小或滚动时将点绘制到 PictureBox 中,并检查哪些点位于可见区域内。

补充:如果将元素绘制到 jpg 副本中并放入 PictureBox 中可能就足够了?

【讨论】:

    【解决方案2】:

    您应该能够将事件处理程序挂钩到 PictureBox 的各个变化点(您提到了滚动和调整大小)。然后,您可以将绘制代码放入从这些事件处理程序调用的方法中。

    【讨论】:

      【解决方案3】:

      WPF 可能是一个更好的选择。它是硬件加速的,将为您执行所有剪辑和缩放转换(您只需设置适当的属性)。您还应该能够使用 WPF 元素跟踪 POI,而不必自己绘制它们。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-25
        • 2016-05-06
        • 2013-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多