首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >定位图形绘制

定位图形绘制
EN

Stack Overflow用户
提问于 2013-09-18 13:57:53
回答 3查看 2.4K关注 0票数 1

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

代码语言:javascript
复制
//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方法的一部分:

代码语言:javascript
复制
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(Polygon poly in e.Graphics) { poly.Location = new Point(poly.Location.X * 2, poly.Location.Y * 2); }

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-18 14:17:51

当你繁衍

poly.Location = new Point(poly.Location.X * 2, poly.Location.Y * 2);添加时正在执行拉伸操作

poly.Location = new Point(poly.Location.X + 50, poly.Location.Y +50);您正在执行翻译操作。

票数 1
EN

Stack Overflow用户

发布于 2013-09-18 14:28:43

当将点的坐标相乘时,它们在画布的左上角点(0,0)周围缩放:

为了使它围绕它的中心(我想你希望它这样工作),你需要计算出多边形的某种中心。为了简单起见,它甚至可以是在X和Y轴上坐标的算术平均值。如果您已经有了中心的坐标,那么通过将每个点的坐标转换为由中心坐标生成的反向矢量(如果您在此操作之后绘制它--多边形的中心位于坐标系的中心),情况将是这样的:

现在,做你的缩放:

然后用多边形的中心坐标向量将它移回:

票数 3
EN

Stack Overflow用户

发布于 2013-09-18 14:22:03

如果您想在不修改存储的弦的情况下移动everything,那么只需在绘制之前翻译图形:

代码语言:javascript
复制
    private void pictureBox1_Paint(object sender, PaintEventArgs e)
    {
        e.Graphics.TranslateTransform(100, 100); // shift the origin somehow
        // ... draw the polygons as before ...
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18874231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档