簡體   English   中英

360度繪制矩形

[英]Drawing rectangles in 360 degrees

我正在制作一個可以繪制矩形的小型繪畫應用程序。 但是,除了西南象限以外,我無法在其他任何地方繪制矩形。 我正在使用此繪制矩形:

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

我只是想念些小東西嗎? 還是我必須進行計算以找出在哪里設置原點? 如果這種解釋太混亂了,我可以提供圖像。

您需要將較小的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));

如果您轉到“東部”,則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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM