2010-06-25 235 views
0

我正在與delphi合作。我有一組點,它們繼續顯示在圖像中。與CreatePolygonRgn混淆

alt text http://i50.tinypic.com/4zylxl.jpg

然後我給這個數組CreatePolygonRgn和創建區域說RGN1。

rgn1 := CreatePolygonRgn(tmpary1[0],Count,WINDING);

然後我填區,並顯示在我的TImage中所示的控制圖像。問題是從左側開始,點也覆蓋在區域中,但是從右側開始沒有覆蓋陣列的點。這可以在圖像中看到,從左側的綠色邊框沒有顯示,但從右側邊框可見。我誤認爲某處?如果我的問題不清楚,請提問。
謝謝。

編輯:

for cnt := 0 to Count - 1 do begin 
    p1 := imgmain.Picture.Bitmap.ScanLine[tmpary[cnt].Y]; 
    p1[tmpary[cnt].X].rgbtBlue := 0; 
    p1[tmpary[cnt].X].rgbtGreen := 255; 
    p1[tmpary[cnt].X].rgbtRed := 0; 
    end; 
    rgn1 := CreatePolygonRgn(tmpary1[0],tmpseq1.Count,WINDING); 
    imgmain.Picture.Bitmap.Canvas.Brush.Color := clRed; 
    FillRgn(imgmain.Picture.Bitmap.Canvas.Handle,rgn1,imgmain.Picture.Bitmap.Canvas.Brush.Handle); 
+0

顯示一些代碼,您可以在其中繪製綠色輪廓以及繪製紅色填充的位置。我認爲你正在繪製比綠色輪廓更多的左側一個像素的紅色。 – 2010-06-25 06:47:30

+0

@The_Fox更新... – Himadri 2010-06-25 06:55:50

回答

2

這可能只是它的工作方式。 FillRect,例如,includes the left and top borders, but excludes the right and bottom borders of the rectangle. 我認爲相同的可能適用於FillRgn

編輯:確認here,也。

+0

@TOndrej哦...右.. :-(我想要整個地區......我該怎麼辦?我使用洪水填充獲取積分,因爲您從我之前已經知道question ... – Himadri 2010-06-25 09:29:19

+0

@TOndrej但http://msdn.microsoft.com/en-us/library/dd183511%28v=VS.85%29.aspx它顯示createpolygonrgn將排除整個大綱..而在我的情況下不包括右側和底部的輪廓??? – Himadri 2010-06-25 09:44:59

+0

你可以通過矩陣的矩陣,使用InflateRect API將它們的寬度和範圍擴大一個像素。 – 2010-06-25 09:48:08

0

最後我找到了解決我的問題的可行方案,也解決了this問題,因爲兩個問題都是相互關聯的。
我正在填補該地區,然後試圖獲得該地區的邊界。我得到了原始數組的一些點作爲邊界,有些點是實際的邊界點。我想要所有的實際邊界點。


所以,現在我用紅色填充該區域,然後用紅色填充數組的像素,然後運行洪泛算法。它會給我所需的所有點。

+0

@TOndrej嗨,這只是爲了告訴你我在你的幫助下找到了解決方案。 – Himadri 2010-07-07 05:45:33