c# - 定位图形绘制

标签 c# winforms

我正在尝试使用 e.Graphics.DrawPolygon(或 DrawLine)绘制一些多边形和线条。但是我在指定要绘制的坐标时遇到了一点问题。我正在使用其 Paint 事件绘制到 PictureBox 上。元素相对于彼此正确绘制(创建所需的最终图片),但似乎总是绘制在 PictureBox 的左上角。在创建要绘制的点时,当我只是尝试乘以坐标时,它会在同一个地方绘制它但更大(乘以大小,而不是位置坐标)。 这是我的代码:

//some for loop
{
//getting the coordinates
Point toAdd = new Point((int)xCoord, (int)yCoord); // creating the point from originaly a double, here i tried to multiply..
tmpPoints.Add(toAdd); // tmpPoints is a List<Point>
}
points.Add(tmpPoints.ToArray()); //List<Point[]>


drawBuffer = points; //saving to a public List<Point[]>
points.Clear();
this.Invalidate();

这里是pictureBox1_Paint方法的一部分:

for (int i = 0; i < drawBuffer.Count; i++)
        {
                //some other stuff like deciding which color to use, not very important
                Brush br = new SolidBrush(polyColor);
                e.Graphics.FillPolygon(br, drawBuffer[i]);
                brush.Dispose();
        }

我使用断点检查过,坐标是相同的比例(100 像素宽仍然是 100 像素宽),它们的坐标类似于 x 3000 和 y 1500,但它只是在左上角绘制自己.当我将坐标乘以 3 倍时(请参阅我乘以位置的代码),它在同一位置绘制但大 3 倍(检查坐标后没有意义......) 所以,我的问题是 - 如何正确设置位置,或者有其他方法可以做到这一点吗? 像这样(我知道,这是废话,只是举个例子)

foreach(e.Graphics 中的多边形多边形) { poly.Location = new Point(poly.Location.X * 2, poly.Location.Y * 2); }

最佳答案

当您乘以点的坐标时,它们会围绕 Canvas 的左上角点 (0, 0) 进行缩放:

Polygon scaled around (0,0)

为了围绕其中心缩放它(我想您希望它以这种方式工作),您需要计算多边形的某种中心。为简单起见,它甚至可以是 X 轴和 Y 轴坐标的算术平均值。如果您已经有了中心的坐标,则将每个点的坐标转换为由中心坐标制成的反向向量(这就是您在此操作后绘制它的样子 - 多边形的center 在坐标系的中心):

Polygon is in the center of the coordinate system

现在,进行缩放:

Polygon scaled

并通过多边形中心坐标的向量向后移动它:

enter image description here

关于c# - 定位图形绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18874231/

相关文章:

c# - 什么图标应该设置为表单的图标?

c# - 在网络上获取图像的尺寸 - 避免内存占用?

c# - 如何将非英文命名文件添加到 Visual Studio 2010 中的安装项目?

c# - OnPaint 在调整大小时留下痕迹

c# - 从负载处理程序关闭表单

c# - 在属性树上使用 IWindowsFormsEditorService 进行下拉列表不会关闭

c# - 是否可以在配置中定义一个变量?

c# - 如果没有匹配的 Monitor.Exit,Monitor.Enter 会发生什么情况?

c# - Xamarin Forms IOS "Entry"不可编辑

c# - 如何从文件名获取完整文件路径?