Hacer bote de pintura en C#

Hola, estoy haciendo un control que hace mas o menos lo que hace el paint, bueno, solamente te permite dibujar sobre el en colores, tamaño de lapiz, etc. Tengo un dibujo en blanco y negro y quiero poder rellenar una zona con un color como lo haría con Paint. A alguien se le ocurre como se podría hacer ó conoce algún control ó codigo ya hecho ? Es que estoy dando muchas vueltas y no veo nada en claro.

PD: se que es mas facil hacerlo en Paint XDD, pero es un control que tiene la aplicacion principal y ahora quieren que se pueda rellenar tambien...
Si el punto donde pinchan es (x,y) de color (r,g,b) cambia el color de los puntos (x+i,y+j) iterativamente hasta que el color de (x+i,y+j) sea distinto de (r,g,b).

Algo así debería servir.
Ferdy escribió:Si el punto donde pinchan es (x,y) de color (r,g,b) cambia el color de los puntos (x+i,y+j) iterativamente hasta que el color de (x+i,y+j) sea distinto de (r,g,b).

Algo así debería servir.


Sí y también habría que cambiar el color de los puntos (x-i, y-j).

Imagen
Mediante recursividad es muy fácil, aunque es mucho más costoso computacionalmente, sería algo así:
botePintura (nuevoColor, x, y) {
color = obtenerPuntoColorPunto(x, y);
pintar(x, y, nuevoColor);
botePinturaRecursivo(x, y+1, color, nuevoColor);
botePinturaRecursivo(x, y-1, color, nuevoColor);
botePinturaRecursivo(x-1, y, color, nuevoColor);
botePinturaRecursivo(x+1, y, color, nuevoColor);
}

botePinturaRecursivo(x, y, color, nuevoColor) {
if (color != obtenerPuntoColorPunto(x, y))
      return;

pintar(x, y, nuevoColor);
botePinturaRecursivo(x, y+1, color, nuevoColor);
botePinturaRecursivo(x, y-1, color, nuevoColor);
botePinturaRecursivo(x-1, y, color, nuevoColor);
botePinturaRecursivo(x+1, y, color, nuevoColor);
}
Sí y también habría que cambiar el color de los puntos (x-i, y-j).


Se supone que (x+i,y+j) incluye los valores tanto positivos como negativos de i y j.... pero bueno, nunca está mal recordarlo :)

- ferdy
pero esta fórmula funcionaría solamente con dibujos cuya silueta sea mas bien circular ó rectangular. Pero imaginaros que tengo el dibujo de un bomerang y que pincho sobre una de las puntas. La otra punta quedaría pintada con este algoritmo ó se pararía el proceso cuando el progreso de x e y toquen el color negro de la silueta ???

No se si me explico bien, si puedo luego os lo explico mejor con un dibujo, que ara toi en el curro xD.

PD: Muchas gracias por vuestra ayuda.
Tienes tres opciones:

1) Que te lo dibujes y lo mires con cuidado. Es decir que razones sobre lo que estás haciendo.
2) Que lo programes y lo pruebes (coño, te han dado hasta un código de ejemplo).
3) Que te volvamos a hacer los deberes.......
6 respuestas