Visual borland c++

Riu

necesito realizar una herramienta parecida a la del paint (bote de relleno.)
La cosa es que no se como hacerla y es la unica cosa que me falta del programa , alguno podria decirme como hacerlo tengo esto.
primero averiguo el color del pixel sobre donde quiero colorear.
colore2 es una variable de tipo TColor, donde almacenare el color del pixel que señalo.

colore2=Image1->Canvas->Pixels[X][Y];

lo siguiente es ir comparando los pixels de alrededor y cambiarlo a otro color que yo le diga, para eso tengo este otro codigo.

TColor colore;

Image1->Canvas->FloodFill(X,Y,colore,fsSurface);

ese codigo deberia pintar una superficie cerrada por otro color que no sea el que yo estoy señalando previamente.

Si alguno sabeis como soluciarno , postIT.

Soltrac

A ver si se me ocurre.

yo creo que deberías hacer una función recursiva de este tipo (te lo voy a poner en pseudocódigo, q no toco lo de canvas desde hace 4 años xD)

La llamada primera sería

ComprobarColor(X,Y,Color[X][Y],ColorAPoner)

Y la función

ComprobarColor(X,Y,ColorPrimero,ColorNuevo)
{
If (ColorPrimero==Color[X][Y]) {
Color[X][Y]=ColorNuevo;
ComprobarColor(X-1,Y,ColorPrimero,ColorNuevo);
ComprobarColor(X,Y+1,ColorPrimero,ColorNuevo);
ComprobarColor(X+1,Y,ColorPrimero,ColorNuevo);
ComprobarColor(X,Y-1,ColorPrimero,ColorNuevo);
}
}

Podria funcionar, ¿no crees?

Eso si, este método es mierda y lentísimo!, eso seguro.

Riu

Image1->Canvas->FloodFill(X,Y,Image1->Canvas->Pixels[X][Y],fsSurface);
Image1->Canvas->Pixels[X][Y];
esto pasa el color del pixel ke hemos señalado y el parametro fsSurface convierte todos los puntos de alrededor que sean del mismo color que el que hemos pasado mediante X,Y primeros al color del pixel que ahora hemos asignado..

Usuarios habituales

  • Riu
  • Soltrac