2010-06-25 192 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