[英]Drawing rectangles in 360 degrees
我正在制作一個可以繪制矩形的小型繪畫應用程序。 但是,除了西南象限以外,我無法在其他任何地方繪制矩形。 我正在使用此繪制矩形:
graphics.DrawRectangle(
mainPen,
prevPoint.X,
prevPoint.Y,
e.Location.X - prevPoint.X,
e.Location.Y - prevPoint.Y);
我只是想念些小東西嗎? 還是我必須進行計算以找出在哪里設置原點? 如果這種解釋太混亂了,我可以提供圖像。
您需要將較小的X
和Y
設置為Rectangle's
左上角點,將兩點之間的絕對差設置為width
和height
。 您可以使用此:
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));
如果您轉到“東部”,則e.Location.X - prevPoint.X
的計算會給您帶來負面的影響,因為起點(例如200)小於終點(例如400)。 因此,您要將負整數傳遞給寬度和高度的方法。
根據規范: http : //msdn.microsoft.com/zh-cn/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)
);
由於該方法期望參數為(左上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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.