Por ahora no puedo desvincular eso solo del programa general, sería complejo de explicar.
Pero hay un método sencillo que si puedes usar:
En este enlace hay un "busca bordes" donde puedes bajar el FLA.
http://www.cristalab.com/foros/viewtopic.php?t=33964
Cómo hacer con ese código mapas?
En lugar de "pinocho" , usa de imagen un mapa ( con algunos retoques simples previos).
Ese programa crea un array de "contornos" y a cada array le asocia un MC. También puse por algún lado un script de compresión y descompresión de la forma).
Aparte de todo eso. El método más correcto y general se basa en el uso de relleno de color de cada zona.
Estos son los pasos para hacer un script que lo realice:
1) tenemos un mapa, (mejor si tiene calidad y contornos suficientemente difrenciados). Le aplicamos un poco de tratamiento previo de edición de imagen conveniente a nuestros propósitos
2) Lo importamos a la biblioteca como imagen y le damos un nombre para vincular con AS
Consideraremos que el mapa tiene fronteras de un color ( o rango corto de color)
3) El script:
a/ Importamos con attach el bitmap de la biblioteca y le damos un nombre (mapa)
b/ Bucle de barrido doble en X e Y y buscando ese rango con
color = mapa.getPixel(x,y); Si el color de las "fronteras" está un rango ( por ejemplo negro hasta gris oscuro) 0 a
0x101010. Lo cambiamos a uno completo a nuestro gusto ( usaremos un AZUL: 0x0000ff
como ejemplo) y lo pondremos de ese color con
mapa.setPixel(x, y , AZUL); Al terminar tenemos un mapa NITIDO de bordes azules. y el resto de la imagen sin cambiar.
c/ Le hacemos un threshold de tipo excluyente :
mapa.threshold(mapa, mapa.rectangle, new Point(), "!=",AZUL, 0); Eso nos eliminará del mapa "todo lo que no es azul pasa a transparente".
d/ Ahora de nuevo un doble blucle en X e Y le incluimos un contador y el condicional de
busqueda será ( usando getPixel también):
Si AZUL, cuento y sigo,
Si no AZUL y el contador en mayor que 0:
Hago un clón del mapa :
mapa2 = mapa.clone(); Rellenamos ees clón de un colorA( pondré ROJO: 0xff0000) en ese punto:
mapa2.floodFill(x, y , ROJO); Y un threshold de nuevo al clón con ese color:
mapa2.threshold(mapa2, mapa2.rectangle, new Point(), "!=", ROJO, 0); y ahora al mapa base un relleno de esa zona con el color azul puesto que ya está
tomada y asignada:
mapa.floodFill(x, y , AZUL); Creamos un clip vacio, recortamos con getColorBoundsRect el mapa2 y su salida la
atachamos al MC creado ( conveniente que sea un array de MC´s).
Ponemos a 0 en contador de AZUL y aumentamos en 1 contador del array de MC´s
(provincias).
Cuando el bucle termina..............tenemos
n MC´s con una forma ROJA (provincia) en cada elemento del array de MC´s y cada uno contiene una zona del mapa.
Este es el "logical" básico con algunas de las instrucciones ya indicadas en negrita.Se puede optimizar mucho para mayor velocidad. Si lo realizas y tienes algún problema, postea y te ayudo.
PD.....Hernanrivas da un corte de mangas con su brazo izquierdo intacto.