Comunidad de diseño web y desarrollo en internet online

Recorrer contorno de imagenes

Citar            
MensajeEscrito el 17 Abr 2006 05:01 pm
Pongo otro pequeño ejemplo (10K incluyendo el bmp aunque se puede prescindir de él) de lectura de bordes con color:

http://www.telecable.es/personales/terepardo1/SWFs/bordes_pinocho.swf

Añado los scripts de las funciones de compilar y decompilar la salida del código para convertirlo en cadena exportable y/o array como explicaba más arriba.
De ese modo la imagen se convierte en una cadena de figuras cerradas que se pueden perfilar, dibujar y rellenar; así como convertir en MC´s independientes para multitud de efectos.

DECOMPILAR: Convierte la cadena comprimida en un array triple de colores, formas, puntos.

Código :

function decompilar(cdn){
   cdh=["a","b","c","d","e","f","g","h","000","111","222","333","444","555","666","777"];
   p=new Array (1,1,1,0,-1,-1,-1,0,-1,0,1,1,1,0,-1,-1)
   st = cdn.split("C");
   for (var n=0 ;n < st.length ; n++){
      st[n] = st[n].split("M");
      for (var m=1 ;m < st[n].length ; m++){
         st[n][m]=st[n][m].split("P")
         st[n][m][0]= st[n][m][0].split(",")
         xx=Number(st[n][m][0][1]);
         yy=Number(st[n][m][0][2]);
         st[n][m][0]=new Point(xx,yy)
         Cda=st[n][m][1] ; Cms=""
         Cig=Cda.indexOf("<");
         while(Cig != -1){
            Cii=Cda.indexOf("|");
            Cif=Cda.indexOf(">");
            CN=Number(Cda.substring(Cii+1,Cif));
            NM=Cda.substring(Cig+1,Cii);
            for (var q=0 ;q < CN  ; q++){Cms +=NM;}
            Cda = Cda.substr(0,Cig)+Cms+Cda.slice(Cif+1);
            Cms="";
            Cig=Cda.indexOf("<");
         }
         for ( var k=0 ; k<8 ; k++){
            Cig=Cda.indexOf(cdh[k]);
            while(Cig != -1){
               Cda = Cda.substr(0,Cig)+cdh[k+8]+Cda.slice(Cig+1);
               Cig=Cda.indexOf(cdh[k]);
            }
         }
         for ( var h=0 ; h < Cda.length ; h++){
            adX= p[Number(Cda.substr(h,1))]; 
            adY= p[Number(Cda.substr(h,1))+8];
            st[n][m][h+1]= new Point(st[n][m][h].x+ adX ,st[n][m][h].y+ adY)
         }
      }
   }
   return st;
}


COMPILAR: Convierte el array de colores, formas, puntos en una cadena y la comprime.

Código :

function compilar(ay){
   sal="";
   for (var n=1 ;n < ay.length ; n++){
      sal += "C"+ ay[n][0]
      for (var m=1 ;m < ay[n].length ; m++){
         sal += "M,"+ ay[n][m][0].x+","+ ay[n][m][0].y+"P"+ compresor(ay[n][m][1]);
      }
   }
   return sal;
}

function compresor(cadena){
   for(var m = 1 ; m <= 5  ; m++){
      cadena2=""; lc = cadena.length; ctcd=0;
      for(var j = 0 ; j < lc  ; j+=m){
         cdsub = cadena.substr(j,m);
         cadena2+=cdsub; ctcd++;
         if (cdsub != cadena.substr(j+m,m) && ctcd > 6-m){
            cadena2 = cadena2.substr(0,cadena2.length-ctcd*m)+ "<"+cdsub+"|"+ctcd+">";
            ctcd=0;
         }
         if (cdsub != cadena.substr(j+m,m) && ctcd <= 6-m){
            ctcd=0;
         }
      }
      cadena=cadena2;
   }
   lc = cadena.length;
   for(var j = 0 ; j < lc-2  ; j++){
      if( Number(cadena.substr(j,3))%111 ==0){
         cadena=cadena.substr(0,j)+String.fromCharCode(Number(cadena.substr(j,1))+97)+cadena.substr(j+3);
         j-=2; lc = cadena.length;
      }
   }
   return cadena
}


Terminadas las vacaciones, continuo con los tutoriales que he empezado.

Por Teseo

SWAT Team

1780 de clabLevel

14 tutoriales

Genero:Masculino   SWAT

msie
Citar            
MensajeEscrito el 18 May 2006 10:39 pm
Pongo este ejemplo como previo a los tutos que terminaré en breve sobre la clase bitMap ( estoy con la lista de trucos que es muy extensa). Por ahora, destripen esto :P (añado botón para bajar el FLA).
Permite observar el funcionamiento de un detector de bordes en color que utiliza muy poco código y experimentar con las 2 formas de dibujo:
Por pixel( setPixel) o por vector( lineTo) asi como relleno con floodFill o beginFill. Si se disminuye el tamño de la ventana contenedora del SWF se observa la diferencia de calidad de resolución entre una y otra forma. Por otra parte es un método sencillo de convertir un PNG ( en este caso) a vector y dinámicamente.
Dudas o comentarios por este mismo conducto.

Por Teseo

SWAT Team

1780 de clabLevel

14 tutoriales

Genero:Masculino   SWAT

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.