绘制360度的矩形

时间:2013-03-19 22:20:03

标签: c# winforms graphics

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

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

我只是错过了一些小事吗?或者我是否必须进行计算才能确定原点的设定位置?如果这个解释太混乱,我可以提供图像。

3 个答案:

答案 0 :(得分:1)

您需要将较小的XY设置为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);