2010-06-25 4 views
0

나는 델파이와 일하고있다. 나는 이미지에서 보여지는 것과 같이 계속되는 점들의 배열을 가지고있다.CreatePolygonRgn과의 혼동

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

은 그 때 나는 rgn1 말 CreatePolygonRgn이 배열을 제공하고 지역을 만들 수 있습니다.

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

녹색 윤곽선을 그리고 빨간색 채우기를 그릴 곳을 보여주는 코드를 보여줍니다. 나는 녹색 윤곽선보다 왼쪽으로 한 픽셀을 채우는 붉은 색을 그리는 것으로 생각합니다. –

+0

@The_Fox updated ... – Himadri

답변

2

그냥 작동하는 방식을 할 수있다. FillRect 예를 들어 includes the left and top borders, but excludes the right and bottom borders of the rectangle. FillRgn에 적용되는 것으로 생각됩니다.

편집 : 확인한 here도 확인하십시오.

+0

@TOndrej 오 ... 맞아 .. :-(나는 전체 지역을 원했어 ... 어떻게해야합니까? 나는 이전에 알고 있던 점을 얻기 위해 홍수 채우기를 사용하고 있습니다. 질문 ... – Himadri

+0

@TOndrej하지만 http://msdn.microsoft.com/en-us/library/dd183511%28v=VS.85%29.aspx 그것은 createpolygonrgn 전체 개요를 제외 할 보여줍니다 .. 내 경우에는 그것을 오른쪽 및 하단 윤곽을 제외하고 있습니까? – Himadri

+0

InflateRect API를 사용하여 예를 들어 배열의 사각형을 통과하여 한 픽셀을 더 넓게 만들 수 있습니다. –

0

마침내 나는 내 문제에 대한 실현 가능한 해결책을 찾았으며 두 질문이 모두 서로 관련되어 있으므로 this 문제의 해결 방법을 찾았습니다.
나는 영역을 채우고 그 영역의 경계를 얻으려고했다. 원래 배열의 일부 지점을 경계로 가져오고 일부 지점은 실제 경계 지점이었습니다. 나는 실제 경계의 모든 점을 원했다.


이제 붉은 색으로 영역을 채우고 배열의 픽셀을 붉은 색으로 채운 다음 floodfill 알고리즘을 실행합니다. 내가 필요한 모든 포인트를 줄 것이다.

+0

@TOndrej 안녕하세요, 귀하의 도움으로 해결책을 찾았다는 것을 알려 드리기위한 것입니다. – Himadri