簡體   English   中英

使用角 x,y 坐標獲取矩形內的所有像素

[英]Get all pixels within a rectangle using corner x,y coordinates

我有一個 500 x 500 像素的圖像,我用它從 250,000 索引數組中提取數據,其中每個索引代表 1 個像素。

用戶可以在任何方向繪制一個矩形,我正在捕獲每個角的坐標。

我正在嘗試捕獲矩形內的每個像素以引用數據數組並提取相關數據。

我查看了 Javascript 中的 Bresenham 算法,雖然我可以使用此解決方案獲取每個坐標之間的所有點,但我無法遍歷這些點,因為路徑並不總是包含相同數量的像素。

我正在尋找使用以下坐標的值的示例是:

corner1 = [100,100]
corner2 = [100,105]
corner3 = [105,105]
corner4 = [105,100]

結果(排序順序並不重要):

pixelsInRectangle = [
  [100,100],[100,101],[100,102],[100,103],[100,104],[100,105],
  [101,100],[101,101],[101,102],[101,103],[101,104],[101,105],
  [102,100],[102,101],[102,102],[102,103],[102,104],[102,105],
  [103,100],[103,101],[103,102],[103,103],[103,104],[103,105],
  [104,100],[104,101],[104,102],[104,103],[104,104],[104,105],
  [105,100],[105,101],[105,102],[105,103],[105,104],[105,105]
]

我試圖解決的一組坐標是:

corner1 = [183,194]
corner2 = [190,189]
corner3 = [186,184]
corner4 = [179,190]

任何建議將不勝感激!

如果矩形不是軸對齊的:

按 Y 坐標對頂點排序。

獲得最低的。 從接下來的兩個 Y 坐標中選擇左坐標和右坐標。

同時沿左邊緣和右邊緣開始簡單的線光柵化掃描:對於當前 integer Y 值,計算左邊緣、右邊緣和 output 之間的所有水平線(xleft, y)-(xright,y)對應的圓形 X 坐標

對於頂點(x0,y0)-(x1,y1)之間的邊,公式為

x = x0 + (x1-x0)*(y-y0)/(y1-y0)  

三角形利用相同技術的例子

當到達某個頂點時,改變對應邊的方程,繼續。

使用這種方式,您可以填充三角形、平行四邊形、另一個三角形(或者如果兩個頂點共享相同的 Y,則只填充兩個三角形)

(您可以使用 Bresenham 或 DDA,或其他線光柵化算法,如有必要)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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