我正在尝试使用 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) 进行缩放:
为了围绕其中心缩放它(我想您希望它以这种方式工作),您需要计算多边形的某种中心。为简单起见,它甚至可以是 X 轴和 Y 轴坐标的算术平均值。如果您已经有了中心的坐标,则将每个点的坐标转换为由中心坐标制成的反向向量(这就是您在此操作后绘制它的样子 - 多边形的center 在坐标系的中心):
现在,进行缩放:
并通过多边形中心坐标的向量向后移动它:
关于c# - 定位图形绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18874231/