Soy bastante nuevo en el procesamiento de imágenes, y actualmente estoy trabajando en una aplicación similar a la pintura que contará con un cubo de relleno. Sin embargo, no tengo idea de cuál es el mejor algoritmo para llenar un cubo.
Implementé un ejemplo que encontré en este sitio , sin embargo, se topó con problemas de bucle infinito cuando un usuario trató de llenar un área que ya había sido llena con el mismo color.
Actualmente estoy trabajando en ese problema llenando a la izquierda, derecha, arriba y luego abajo; sin embargo, lo hice para que una vez que un píxel se haya rellenado a la izquierda, no pueda llenarse a la derecha, lo que significa formas como:
no se llenará correctamente si la herramienta de cubo se usa en el punto rojo.
Por lo tanto, espero que alguien conozca un algoritmo o un enlace a uno que resuelva todos estos problemas.
Información adicional: Esto se implementará utilizando Javascript como herramienta de pintura. Se usará en línea utilizando el elemento Canvas.
fuente
Respuestas:
Parece que realmente estás buscando lo que se llama un algoritmo de relleno de inundación. Esa puede ser la razón por la que no ha encontrado toneladas de ejemplos para ello. Hay varios métodos de relleno de inundación enumerados en la página de Wikipedia para el algoritmo . Recomiendo uno de los métodos no recursivos, 'en cola'.
fuente
I highly recommend one of the non-recursive, 'queued' methods.
- ¿Podrías explicar por qué?Actualmente estoy haciendo lo mismo. Sin embargo, cuando me encontré con el problema que usted señala, opté por simplemente finalizar la función si se hizo clic en la herramienta sobre un área del mismo color que está tratando de pintar (esto también parece ser el comportamiento de ms-paint) .
El método en cola debe ser extremadamente intuitivo para cualquier persona con alguna experiencia en programación.
Si le preocupa pintar el área que rodea una mancha del mismo color que su pintura, puede:
Si lo desea, puede ver mi código (bastante vergonzoso) aquí .
Está lejos de ser rápido, pero funciona bien ...
fuente