2010-06-25 5 views
0

Je travaille avec Delphi. J'ai un tableau de points qui continue comme indiqué dans l'image.Confusion avec CreatePolygonRgn

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

Ensuite, je donne ce tableau à CreatePolygonRgn et créer la région disent rgn1.

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

Puis-je remplir la région et l'afficher sur mon contrôle TImage comme indiqué dans l'image. Le problème est du côté gauche, les points sont également couverts dans la région mais du côté droit les points du tableau ne sont pas couverts. Ceci peut être vu dans l'image que la bordure verte du côté gauche n'est pas montrée mais de la frontière du côté droit est visible. Est-ce que je me trompe quelque part ??? Si ma question ne vous est pas claire, veuillez demander.
Merci.

Edit:

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

Montrez du code où vous dessinez le contour vert et où vous dessinez le remplissage rouge. Je pense que vous dessinez le remplissage rouge d'un pixel plus à gauche que le contour vert. –

+0

@The_Fox mis à jour ... – Himadri

Répondre

2

Il peut être juste la façon dont il fonctionne. FillRect, par exemple, includes the left and top borders, but excludes the right and bottom borders of the rectangle. Je pense que la même chose s'applique probablement à FillRgn.

Editer: Confirmé here, aussi.

+0

@TOndrej Oh ... droite .. :-(Je voulais toute la région ... que dois-je faire? J'utilise le remplissage d'inondation pour obtenir des points comme vous le savez déjà de mon précédent question ... – Himadri

+0

@TOndrej Mais http://msdn.microsoft.com/en-us/library/dd183511%28v=VS.85%29.aspx Il montre que createpolygonrgn va exclure tout contour .. alors que dans mon cas, il est excluant les contours droit et inférieur ??? – Himadri

+0

Vous pouvez par exemple parcourir les rectangles de votre tableau et les agrandir d'un pixel en utilisant l'API InflateRect –

0

Enfin, j'ai trouvé la solution possible à mon problème et aussi la solution du problème this que les deux questions sont liés les uns aux autres.
Je remplissais la région et j'ai ensuite essayé d'obtenir la limite de cette région. Je recevais certains points du tableau original comme limite et certains points étaient des points limites réels. Je voulais tous les points de la frontière actuelle.


Alors, maintenant je remplir la région avec la couleur rouge puis remplir les pixels de tableau avec la couleur rouge, puis je cours algorithme floodfill. Cela donnera tous les points dont j'avais besoin.

+0

@TOndrej Bonjour, C'est juste pour vous informer que j'ai trouvé une solution avec votre aide. – Himadri