我正在制作一个能够绘制矩形的小型绘画应用程序。但是,我无法在西南象限以外的任何地方绘制矩形。我用这个绘制矩形:
graphics.DrawRectangle(
mainPen,
prevPoint.X,
prevPoint.Y,
e.Location.X - prevPoint.X,
e.Location.Y - prevPoint.Y);
我只是错过了一些小事吗?或者我是否必须进行计算才能确定原点的设定位置?如果这个解释太混乱,我可以提供图像。
答案 0 :(得分:1)
您需要将较小的X
和Y
设置为Rectangle's
左上角点,并将这些点之间的绝对差值设置为width
和{{1 }}。你可以用这个:
height
答案 1 :(得分: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)
);
答案 2 :(得分: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);