0

我正在制作一个能够绘制矩形的小型绘画应用程序。但是,我不能在西南象限以外的任何地方绘制矩形。我正在使用这个绘制矩形:

graphics.DrawRectangle(
    mainPen, 
    prevPoint.X, 
    prevPoint.Y, 
    e.Location.X - prevPoint.X, 
    e.Location.Y - prevPoint.Y);

我只是缺少一些小东西吗?还是我必须进行计算才能确定在哪里设置原点?如果这个解释太混乱,我可以提供图片。

4

3 回答 3

1

您需要将较小的XY设置为您Rectangle's的左上角点,并将点之间的绝对差设置为您的widthheight。你可以使用这个:

int left = prevPoint.X < e.Location.X ? prevPoint.X : e.Location.X;
int top = prevPoint.Y < e.Location.Y ? prevPoint.Y : e.Location.Y;
graphics.DrawRectangle(mainPen, left, top, Math.Abs(e.Location.X - prevPoint.X), Math.Abs(e.Location.Y - prevPoint.Y));
于 2013-03-19T22:26:50.620 回答
1

如果你去“东” ,计算e.Location.X - prevPoint.X给你一个负的反弹,因为起点(比如 200)小于终点(比如 400)。因此,您将负整数传递给宽度和高度的方法。

根据规范: http: //msdn.microsoft.com/en-us/library/x6hb4eba.aspx你总是定义矩形的左上角,然后定义一个(正)宽度和高度。

试试这个:

graphics.DrawRectangle(
    mainPen, 
    Math.Min(prevPoint.X, e.Location.X), 
    Math.Min(prevPoint.Y, e.Location.Y), 
    Math.Abs(e.Location.X - prevPoint.X), 
    Math.Abs(e.Location.Y - prevPoint.Y)
);
于 2013-03-19T22:27:23.727 回答
1

由于该方法期望参数为(左上 x,左上 y,宽度,高度),我假设您需要计算哪个点是矩形的左上角。将其用作前两个参数,然后通过减去两个点并取绝对值来计算宽度/高度。

代码应该是这样的:

int leftX, leftY, width, height;
leftX = prevPoint.X < e.Location.X ? prevPoint.X : e.Location.X;
leftY = prevPoint.Y < e.Location.Y ? prevPoint.Y : e.Location.Y;
width = Math.Abs(prevPoint.X - e.Location.X);
height = Math.Abs(prevPoint.Y - e.Location.Y);
graphics.DrawRectangle(mainPen, leftX, leftY, width, height);
于 2013-03-19T22:27:47.900 回答