0

我在 ac# 面板的背景图像上画线。面板锚定到表单,以便表单调整面板大小。背景图像设置为拉伸,因此当您调整表单大小时,您所看到的只是背景图像。

我最初的问题:在面板上绘制的线条(通过 OnPaint 事件)在图像调整大小时停留在它们最初绘制的位置。

我当前的解决方案:记录线的位置并通过缩放 X 和 Y 坐标在新的位图上重绘它(工作正常)。

我的新问题:当您不断调整窗口大小并绘制线条时,您无法从任何时间点计算缩放因子并将其应用于所有线条,因为线条最初是在不同尺寸的图像中绘制的。

我认为我有两个选项:重绘线后,通过我的线数组并更新坐标信息,使其现在与当前比例匹配。或者除了存储线的坐标信息之外,还存储面板在绘制时的尺寸信息,这样我总是可以根据每条线的绘制时间和新的面板尺寸来计算每条线的比例。

我希望的是:如果您对这两种方法中的任何一种有任何想法,将不胜感激......更好的是向我指出一个更好的方法来做到这一点(我对c# 中的图形处理)。

4

1 回答 1

0

不能写评论,就像我想要的那样。你确实有几个选择:

  • 直接在原始位图上画线。这可能不是您的选择,具体取决于任务。

  • 像现在一样做,跟踪线条的坐标,在调整大小时更新它们,并在 Paint 上重绘它们——如果你使用它,你也可以移动和删除它们,

  • 或者通过引入在每次调整大小时更新的“比例因子”(浮点数)来做到这一点,并在 Paint 事件处理程序中使用该比例因子绘制所有内容。创建一条线时,您可以使用比例因子 BACK TO 统一坐标系(比例因子 1)计算其坐标,然后您根本不必修改坐标。由于统一的坐标系,这可能很容易调试。这是我推荐的,但这又取决于你的任务。

  • 绘制到与原始图像大小相同的完全透明位图,使用上一个选项中的比例因子。创建一条线时,在统一坐标系中计算其坐标,将其绘制在位图上,然后在每个 Paint 上,将整个位图绘制在原始位图上。同样,如果您需要删除或移动您的线条,或者您的内存很紧,或者您不希望您的线条在放大时变得模糊,这可能不是一个选项,但不知何故,很多人都喜欢这样因为它就像“Photoshop 中的图层”。:)

于 2013-01-18T20:53:24.887 回答