Quiero llenar el color en el área blanca para su aplicación pintura a base así que por favor dame sugerencia de cómo hacer este trabajo ..cómo llenar el color de la imagen en un área determinada?
Respuesta
he encontrado la solución con Rellenar algoritham relleno
private void FloodFill(Bitmap bmp, Point pt, int targetColor, int replacementColor){
Queue<Point> q = new LinkedList<Point>();
q.add(pt);
while (q.size() > 0) {
Point n = q.poll();
if (bmp.getPixel(n.x, n.y) != targetColor)
continue;
Point w = n, e = new Point(n.x + 1, n.y);
while ((w.x > 0) && (bmp.getPixel(w.x, w.y) == targetColor)) {
bmp.setPixel(w.x, w.y, replacementColor);
if ((w.y > 0) && (bmp.getPixel(w.x, w.y - 1) == targetColor))
q.add(new Point(w.x, w.y - 1));
if ((w.y < bmp.getHeight() - 1)
&& (bmp.getPixel(w.x, w.y + 1) == targetColor))
q.add(new Point(w.x, w.y + 1));
w.x--;
}
while ((e.x < bmp.getWidth() - 1)
&& (bmp.getPixel(e.x, e.y) == targetColor)) {
bmp.setPixel(e.x, e.y, replacementColor);
if ((e.y > 0) && (bmp.getPixel(e.x, e.y - 1) == targetColor))
q.add(new Point(e.x, e.y - 1));
if ((e.y < bmp.getHeight() - 1)
&& (bmp.getPixel(e.x, e.y + 1) == targetColor))
q.add(new Point(e.x, e.y + 1));
e.x++;
}
}}
inundación en android:
Ver esta imagen FloodFill
Bueno, pero si acabo de agregar este algoritmo a Mi aplicación de Android si llamo a la función FloodFill (con los atributos respectivos), ¿funcionará? ¿Y qué debería dar como atributo de punto en esta función? –
gracias @Hardik, es realmente un algoritmo muy bien escrito. pero para el teléfono Android parece ser muy lento. ¿Conoces alguna otra forma de llenar inundaciones? –
este enlace es más rápido: http://stackoverflow.com/a/17426163/401403 – Arash
Aquí es una aplicación rápida utilizando Python y OpenCV (deben estar disponibles en Android, si se esfuerza lo suficiente):
"""Flood fills with random color on click. Press `q' to exit."""
import cv
import sys
import random
TOL = 10
TOL_BGR = (TOL, TOL, TOL, 0)
def click(event,x,y,flags,im):
if event == cv.CV_EVENT_LBUTTONDOWN:
b,g,r = [ random.random() * 255 for i in range(3) ]
cv.FloodFill(im, (x,y), (b,g,r,0), TOL_BGR, TOL_BGR)
im = cv.LoadImage(sys.argv[1], cv.CV_LOAD_IMAGE_COLOR)
cv.NamedWindow(__file__, 1)
cv.SetMouseCallback(__file__, click, im)
while True:
cv.ShowImage(__file__, im)
key = cv.WaitKey(33)
if chr(key & 0xff) == 'q':
break
cv.SaveImage('floodfill.png', im)
Cada vez que el usuario hace clic en una imagen, las aplicaciones de iluminación con rellenos utilizando la localización clic como una semilla. El color se elige al azar. Puede cambiar las tolerancias modificando el valor de TOL (o TOL_BGR). Aquí está el resultado después de un par de clicks:
El algoritmo general es la misma, independientemente de lo que la tecnología que utiliza.
podría enviar el código fuente, porque no puedo entender esta parte – dineshprasanna
No, no le enviaré un correo electrónico con el código. El código fuente está en mi respuesta, de todos modos. Si no entiende nada, lea la documentación de las funciones relevantes, ya está disponible. – misha
ok no hay problema, gracias por su respuesta, intentaré – dineshprasanna
1) Tener la división para cada porción del color por separado con el mismo tamaño ya que la imagen real y otra parte son transparentes. 2) Tenga la imagen completa con cada parte pintando en diferentes colores en su carpeta dibujable: esta es solo una imagen de referencia.
3) Añadir todas las imágenes se separó en el diseño de marcos y establecer todos los separaron invisible inicialmente y ajuste visibles a imagen real sólo se
4) de código caliente del color para cada divide ur imagen de referencia (paso 2) a partir de por ejemplo, handSplitImageColor = verde;
4) Establezca el oyente para el diseño del marco. Encuentre la posición xey y pase la posición xey a su imagen de referencia (paso 2) y descubra el color en esa ubicación particular y haga coincidir el color con el paso 4 y complete el particular en esa imagen y establezca la visibilidad verdadera para esa imagen dividida. Entonces, solo esa porción se llenará por color, ya que otras partes son transparentes.
Estos son los pasos que utilicé para uno de mis problemas del mismo tipo.
Pero no creo que esta sea la mejor solución pero funciona bien para mí.
- 1. Calcular el color promedio de un área en una imagen
- 2. ¿Cómo responder a un clic fuera de un área determinada?
- 3. ¿Cómo puedo "pre-llenar" el valor de un área de texto en un formulario HTML?
- 4. ¿Cómo detectar el área de texto de la imagen?
- 5. Codeigniter, dominio de un área determinada del sitio
- 6. Cómo obtener el tamaño de un área en JavaCV
- 7. ¿Hace un área de texto para llenar el resto de la página verticalmente?
- 8. ¿Cómo hacer que la imagen/imagen de fondo se estire para llenar el contenedor a través de CSS?
- 9. Cómo llenar el objeto de mapa de bits con color en Android
- 10. ¿Cómo encontrar el color dominante en la imagen?
- 11. Cómo teñir una imagen/mostrar un color?
- 12. Cómo rellenar el área del gráfico con Color
- 13. Establecer el color/patrón de fondo del área de trabajo de Inkscape para distinguir la transparencia
- 14. ¿Cómo rellenar la imagen de OpenCV con un solo color?
- 15. Cambiar el color de la imagen en javascript
- 16. Cómo acercar el área específica de la imagen en el lienzo en Swing
- 17. ¿Cómo obtener un color de mayoría en una imagen?
- 18. cómo llenar el color en espacios en blanco usando el evento táctil?
- 19. Imagen WPF, cambiando el color de los píxeles
- 20. Boxplot, ¿cómo hacer coincidir el color de los atípicos para llenar la estética?
- 21. ¿Cómo llenar un ToolStripComboBox?
- 22. Jquery: evento mouseover en el área de mapa de imagen
- 23. Cómo obtener una imagen en color en el iPhone SDK
- 24. Obtener color de imagen
- 25. ¿Cómo formateo el estilo de la barra de desplazamiento en un área de texto?
- 26. CSS: cómo convertir una imagen en color a una imagen de color gris o negro/blanco
- 27. Cómo rellenar el color en el triángulo
- 28. Cómo alinear la imagen de profundidad de Kinect con la imagen en color
- 29. ¿Cómo puedo cambiar el color de una imagen en Silverlight/WP7 (máscara de color)?
- 30. Rellene el área debajo de la curva en matlibplot python en la escala de log
eche un vistazo al clásico algoritmo de relleno de inundación: http://en.wikipedia.org/wiki/Flood_fill – Jave
Hola, Aquí está el [enlace] [1] para obtener los puntos de la imagen. significa solo la parte real de la imagen y elimina la parte transparente. pero no puedo atar el área. [1]: http://brownandroidattack.blogspot.com/2010/03/image-transparency-aka-absurd.html –
Muchas gracias Jave para obtener información de alogrithm FloodFill –