我正在使用delphi。我有一系列的点继续如图所示。
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 :(得分:2)
它可能就是它的工作方式。例如FillRect
,includes the left and top borders, but excludes the right and bottom borders of the rectangle.
我认为这同样适用于FillRgn
。
编辑:确认here。
答案 1 :(得分:0)
最后我发现了问题的可行解决方案以及this问题的解决方案,因为这两个问题都是相互关联的。
我正在填补该地区,然后试图获得该地区的边界。我得到一些原始数组的点作为边界,一些点是实际的边界点。我想要所有的实际边界点。
所以,现在我用红色填充区域,然后用红色填充数组的像素,然后运行floodfill算法。它将提供我需要的所有要点。