cómo llenar el color de la imagen en un área determinada?

Quiero llenar el color en el área blanca para la aplicación de pintura, así que por favor dame sugerencias sobre cómo hacer este trabajo.

enter image description here

Encontré la solución con el relleno de Flood algoritham

private void FloodFill(Bitmap bmp, Point pt, int targetColor, int replacementColor){ Queue q = new LinkedList(); q.add(pt); while (q.size() > 0) { Point n = q.poll(); if (bmp.getPixel(nx, ny) != targetColor) continue; Point w = n, e = new Point(nx + 1, ny); while ((wx > 0) && (bmp.getPixel(wx, wy) == targetColor)) { bmp.setPixel(wx, wy, replacementColor); if ((wy > 0) && (bmp.getPixel(wx, wy - 1) == targetColor)) q.add(new Point(wx, wy - 1)); if ((wy < bmp.getHeight() - 1) && (bmp.getPixel(wx, wy + 1) == targetColor)) q.add(new Point(wx, wy + 1)); wx--; } while ((ex < bmp.getWidth() - 1) && (bmp.getPixel(ex, ey) == targetColor)) { bmp.setPixel(ex, ey, replacementColor); if ((ey > 0) && (bmp.getPixel(ex, ey - 1) == targetColor)) q.add(new Point(ex, ey - 1)); if ((ey < bmp.getHeight() - 1) && (bmp.getPixel(ex, ey + 1) == targetColor)) q.add(new Point(ex, ey + 1)); e.x++; } }} 

llenado de inundación en Android:

Ver este FloodFill

Aquí hay una aplicación rápida que usa Python y OpenCV (debería estar disponible en Android si lo intentas 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, la aplicación rellena con la ubicación del clic como una semilla. El color se elige al azar. Puede cambiar las tolerancias modificando el valor de TOL (o TOL_BGR). Este es el resultado después de un par de clics:

enter image description here

El algoritmo general es el mismo independientemente de la tecnología que use.

1) Haga que la imagen dividida para cada porción de color por separado con el mismo tamaño que la imagen real y otra parte sean 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) Agregue todas las imágenes divididas en el diseño del marco y establezca todas las divisiones invisibles inicialmente y establezca visibles solo para la imagen real

4) Caliente el código del color para cada división desde su imagen de referencia (paso2) para Eg handSplitImageColor = green;

4) Establezca el oyente para el diseño del marco, encuentre la posición xey, 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 establece 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í.