Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Como pintar dentro de un grafico armado con lineTo (https://www.clubdelphi.com/foros/showthread.php?t=58803)

BC++ 01-08-2008 15:03:08

Como pintar dentro de un grafico armado con lineTo
 
Hola amigos del foro,la pregunta de hoy es...como pinto dentro de una figura armada con lineTopor ejemploCanvas->MoveTo(50,25);Canvas->LineTo(50,25);Canvas->LineTo(80,5);Canvas->LineTo(12,90);Canvas->LineTo(50,25);esto arma un triangulo... ya se que si pongo la opcion triangulo puedo pintar, pero la idea es que se unan lineas y dentro de estas lineas tome un color.Espero ser claro :)Muchas Gracias. BC++

coso 01-08-2008 15:29:35

Hola,
canvas->floodfill

BC++ 01-08-2008 17:20:54

Gracias por responder... pero ... no entiendo

podrias colocar un mini codigo... q lo pueda ejecutar

por q pongo Canvas->floodfill (int x,int y,TColor Color, y aca no tengo idea que es o que tengo q introducir);


muchas gracias

coso 01-08-2008 17:41:44

Bueno, si miras en la ayuda del C++ veras que flood fill lo que hace es llenar un area hasta que encuentra el color TColor, o bien toda el area que es de ese color, a partir del punto X,Y. El parametro que no sabes que introducir es el que decide como rellenar.

te dejo la ayuda de delphi
Cita:


Fills an area of the canvas using the current brush.

type TFillStyle = (fsSurface, fsBorder);
procedure FloodFill(X, Y: Integer; Color: TColor; FillStyle: TFillStyle);

Description

Use FloodFill to fill a possibly non-rectangular region of the image with the value of Brush. The boundaries of the region to be filled are determined by moving outward from the point (X,Y) until a color boundary involving the Color parameter is encountered.

FillStyle determines what type of color changes define the boundaries, as indicated in the following table.

Value Meaning

fsSurface Fill all area that has the color indicated by the Color parameter. Stop when another color is encountered.
fsBorder Fill all area that does not have the color indicated by the Color parameter. Stop when Color is encountered.

Use the Pixels property to get the exact value of the color at the point (X,Y) when using a FillStyle of fsSurface. Similarly, when FillStyle is fsBorder, use Pixels to get the exact value of the boundary color if a point on the boundary is known.
ten en cuenta que es mucho mas rapido buscar en la ayuda del IDE que preguntar en un foro ;) saludos

M@R!N@ 01-08-2008 20:39:19

Bueno espero poder ayudarte...

Canvas->FloodFill(51,25,clRed,fsBorder);

Esa función tiene 4 parámetros, los dos primeros se refiere a las coordenadas a partir de las cuales el canvas empezará a rellenar, clRed pues obvio es el color :p y aqui viene lo importante el último parámetro solo puede tener 2 valores:

fsBorder --> Esta hace que se vaya coloreando el área que NO tiene el color indicado, y para cuando lo encuentra.
fsSourface --> Esta hace que se vaya coloreando el área que tiene el color que le indicaste a la función, y para cuando ya no encuentra ese color.

Con el ejemplo que pusiste de tu triángulo...

Código:

Canvas->Pen->Color=clRed;      //Utilicé de ejemplo el color rojo
Canvas->Brush->Color=clRed;
Canvas->MoveTo(50,25);
Canvas->LineTo(80,5);
Canvas->LineTo(12,90);
Canvas->LineTo(50,25);
Canvas->FloodFill(51,25,clRed,fsBorder);

Si te fijas en la función FloodFill utilicé un punto más en las coordenadas de la que pusiste inicialmente y fsBorder, bueno el chiste es que según para lo que sirve fsBorder, di a entender que se vaya llenando todo lo que no sea rojo y que para cuando encuentre este color... comienzo uno adelante porque el punto (50,25) ya es rojo y pararía el proceso, en cambio el (51,25) aún es gris, espero haberme dado a entender, de todas maneras checa el código y a lo mejor así le entiendas, suerte! ^_^

BC++ 05-08-2008 14:02:07

Buenisimo!! Gracias!
 
Hola!! Muy Buen Ejemplo!

Muchas Gracias ! a los 2 =)

BC++:)

BC++ 05-08-2008 14:02:39

Buenisimo!! Gracias!
 
Hola!! Muy Buen Ejemplo!

Muchas Gracias ! a los 2 =)

BC++:)


La franja horaria es GMT +2. Ahora son las 12:16:18.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi