在c#面板中维护背景图像上的图形线
我在c#面板的背景图像上画线。嵌板定位到窗体,以便窗体调整嵌板的大小。背景图像设置为拉伸,因此在调整窗体大小时所看到的只是背景图像 我最初的问题是: 当图像调整大小时,在面板上绘制的线(通过OnPaint事件)将保持原来绘制的位置 我当前的解决方案: 记录线的位置,并通过缩放X和Y坐标在新位图上重新绘制(工作正常) 我的新问题: 随着不断调整窗口大小和绘制线条,您无法从任何时间点计算缩放因子并将其应用于所有线条,因为这些线条最初都是在不同大小的图像中绘制的 我想我有两个选择: 在我重新绘制直线后,通过我的直线阵列更新坐标信息,使其现在与当前比例匹配。 或 除了存储线的坐标信息外,还存储绘制时面板的尺寸信息,以便我始终可以根据绘制时间和新面板尺寸计算每条线的比例 我希望的是:在c#面板中维护背景图像上的图形线,c#,graphics,scaling,lines,C#,Graphics,Scaling,Lines,我在c#面板的背景图像上画线。嵌板定位到窗体,以便窗体调整嵌板的大小。背景图像设置为拉伸,因此在调整窗体大小时所看到的只是背景图像 我最初的问题是: 当图像调整大小时,在面板上绘制的线(通过OnPaint事件)将保持原来绘制的位置 我当前的解决方案: 记录线的位置,并通过缩放X和Y坐标在新位图上重新绘制(工作正常) 我的新问题: 随着不断调整窗口大小和绘制线条,您无法从任何时间点计算缩放因子并将其应用于所有线条,因为这些线条最初都是在不同大小的图像中绘制的 我想我有两个选择: 在我重新绘制直线后
如果您对这两种方法中的任何一种都有想法,我们将不胜感激……更好的做法是为我指明一个更好的方法来实现这一点(我对c#中的图形处理相当陌生)。无法写评论,尽管我很想写。您有几个选择:
- 直接在原始位图上绘制线条。这可能不是您的选项,具体取决于任务
- 像现在这样做,跟踪直线的坐标,在调整大小时更新它们,在绘制时重新绘制它们-如果使用此功能,也可以移动和删除它们
- 或者通过引入“比例因子”(float)来实现,每次调整大小时都会更新该比例因子,并在绘制事件处理程序中使用该比例因子绘制所有内容。创建直线时,可以使用比例因子将其坐标计算回统一的坐标系(比例因子1),然后不必修改坐标。由于统一的坐标系,这可能很容易调试。这是我的建议,但也取决于你的任务
- 绘制为与原始图像大小相同的全透明位图,使用与上一选项类似的比例因子。创建直线时,在统一坐标系中计算其坐标,在位图上绘制,然后在每次绘制时,在原始位图上绘制整个位图。同样,如果你需要删除或移动线条,或者你的内存很紧,或者你不想在放大时线条变得模糊,那么这可能不是一个选项,但不知何故,许多ppl像这样,因为它就像“Photoshop中的图层”。)