Comunidad de diseño web y desarrollo en internet online

Problemas con suavizado de imagen + listener + MovieCLipLoad

Citar            
MensajeEscrito el 07 Ago 2008 06:16 pm
Hola amigos, no sabía qué nombre ponerle al tema porque son varios problemas juntos.
Tengo una escena con varios botones, que al seleccionarlos carga en un movie clip creado imagenes cargadas dinámicamente de acuerdo al botón seleccionado.
Cada botón llama a una función pasándoles como parámetros textos, en que foto inicia y en que foto finaliza el tema de acuerdo a cada botón.
EL movie clip se llama contenedor, tiene un ancho de 370 px y un alto de 277.5 y dentro de este contenedor hay otro movieclip llamado r_conte.
Este contenedor r_conte tiene a su vez un botón que al apretarlo agranda o disminuye las fotos para verlas mejor.
Aclaro que los movie clips ya están creados en la escena
El primer problema (casi resuelto) era el de suavizar las imagenes ya que las fotos son de 800 x 600 pero tengo que meterlas en el MC de 370 x 227.5, lo que hace que se vean con los bordes serruchados.
Para solucionar este problema del suavizado, hallé el siguiente código y lo adapté a mi necesidad.

Código :

        var loader:MovieClipLoader = new MovieClipLoader();
        var listener:Object = new Object();
        listener.carga=contenedor.r_conte;
        listener.onLoadInit = function(mc:MovieClip) {
             var bitmap:BitmapData = new BitmapData(mc._width, mc._height, true);
             this.carga.attachBitmap(bitmap, this.carga.getNextHighestDepth(),"auto", true);
             mc._height=277.5;
             mc._width=370; 
             bitmap.draw(mc);
    };
        loader.addListener(listener);
        loader.loadClip("Recorrida/reco-"+min+".jpg",contenedor.r_conte);


Lo siguiente funcionó perfectamente para mi primera imagen cargada, pero si selecciono otro botón, me carga la imagen en el MC pero no la suaviza. No se que parte del código saltea, pero carga la imagen pero sin suavizarla.
Yo no se si es un problema del listener o qué, pero funciona la primera vez que ejecuta el código al suavizar la imagen; pero si quiero seleccionar otra imagen, la muestra pero sin suavizado.
Les pido que me pueden ayudar a ver que estoy haciendo mal.
Muchas gracias

Por dbarraud

22 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Ago 2008 07:03 pm
Para que te suavice la imagen solamente tienes que darle esta propiedad al movieClip contenedor cuando la imagen sea leida:

Código :

listener.onLoadInit = function(mc:MovieClip) {
            
   mc.forceSmoothing = true;
            
};

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 07 Ago 2008 07:31 pm
Aclaro que estoy usando Flash 8, parece que la opción que me pasó elchininet no funciona en Flash 8.
Lo probé pero no suaviza las imagenes.

Por dbarraud

22 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Ago 2008 08:02 pm
No... la implementaron con el flash player 9.

Pon el código completo, no solo la parte relativa a leer la imagen, es que no puedo entender muy bien como tienes organizado tus elementos.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 07 Ago 2008 08:45 pm
Este es el código:
Los elementos están todos creados en el escenario.
Hay un movieclip llamado mapa que contiene los botones. Estos botones llaman a la función "recorrida" (que es la importante, la que carga las fotos y la suaviza) y le pasan como parámetro el título (que va a un textField), una descripción (también texto) y le pasan también el rango de las fotos: en que numero empiezan y en cual terminan ej: apretando el boton polideportivo, pasa como parámetro que empieza en el 1 y termina en la foto 7. Al avanzar con los botones de Avanzar o Retroceder, se ven las fotos de acuerdo a su numero.
En el Stage tengo también un movieclip ya creado (contenedor) y dentro de éste hay otro llamado r_conte con un botón que al apretar agranda o disminuye la foto.
Aclaro que las imagenes se cargan dinamicamente y son de 800 x 600 px. El contenedor es del 370 x 277.5 por lo que las imagenes aparecen serruchadas al disminuirles el tamaño. Por esto tube que optar por algún método para suavizarlas.
Bueno, no se que más contarte, sólo que la primer vez que se ejecuta el Flash, se ve perfectamente suvizada la imagen, pero al seleccionar otro botón (se ejecutaría nuevamente la llamada a la función "recorrida") la nueva imagen no aparece suvizada.
Denería haber alguna forma de reiniciar esta función, o el listener o no se que, pero la primera vez que se carga, lo hace correctamente.
Muchas gracias por ver este problema.

Código :

 
this._lockroot = true;
import flash.display.*;
stop();
//Se ejecuta al apretar el botón de salir
this.botonera.b_salir.onPress = function() {
   _root.unloadMovie(this); //esto elimina el Movie Clip que carga esta pelicula
}

var conta,dif,min,max,n:Number;

//****Función para suavizar y mostrar la foto presentada*******

function recorrida(titulo,descripcion:String,mini,maxi:Number){
   var titu,descrip:String;
   min=mini;
   n=min;
   max=maxi;
   titu=titulo;
   descrip=descripcion;
   conta=1;
   dif=(max-min)+1;
   botonera.b_next.enabled=true;
   var loader:MovieClipLoader = new MovieClipLoader();
   var listener:Object = new Object();
   listener.carga=contenedor.r_conte;
   listener.onLoadInit = function(mc:MovieClip) {
         var bitmap:BitmapData = new BitmapData(mc._width, mc._height, true);
         this.carga.attachBitmap(bitmap, this.carga.getNextHighestDepth(),"auto", true);
                mc._height=277.5;
         mc._width=370; 
        bitmap.draw(mc);
          };
   loader.addListener(listener);
        loader.loadClip("Recorrida/reco-"+min+".jpg",contenedor.r_conte);
   _root.tit.text=titu;
   _root.cantfotos.text=(conta+"/"+dif);
   _root.descripcion.text=descrip;
   _root.contenedor.r_conte._width=370;
   _root.contenedor.r_conte._height=277.5;
   _root.contenedor.r_conte._x=0;
   _root.contenedor.r_conte._y=0;
   
}

//*************Llamada a la funcion por medio de los botones********

this.mapa.b_poli.onPress=function(){
   recorrida("Polideportivo","Polideportivo con "+'\n'+"capacidad para  "+'\n'+"600 personas. ",1,7);
}

this.mapa.b_admin.onPress=function(){
   recorrida("Administración","Oficinas de la "+'\n'+"Administración "+'\n'+"del IAB ",8,23);
}

this.mapa.b_biblio.onPress=function(){
   recorrida("Biblioteca","La Biblioteca del IAB "+'\n'+"cuenta con grandes"+'\n'+" volúmenes de libros. "+'\n'+"También aquí se "+'\n'+"encuentra Secretaría, "+'\n'+"Fotocopiadoras y "+'\n'+"Vivencias.",53,59);
}

this.mapa.b_egb.onPress=function(){
   recorrida("EPB","Durante el año 2007"+'\n'+"tuvimos 67 alumnos"+'\n'+"pertenecientes a "+'\n'+"estas modalidades"+'\n'+"de estudio.",28,33);
}

this.mapa.b_polimo.onPress=function(){
   recorrida("Polimodal","Durante el año 2007"+'\n'+"tuvimos 168 alumnos"+'\n'+"pertenecientes a "+'\n'+"esta modalidad"+'\n'+"de estudio.",24,27);
}

this.mapa.b_hs.onPress=function(){
   recorrida("Residencia "+'\n'+"de señoritas","Esta es la residencia "+'\n'+"de señoritas, donde "+'\n'+"conviven 120 alumnas"+'\n'+"internas.",41,45);
}

this.mapa.b_hv.onPress=function(){
   recorrida("Residencia "+'\n'+"de varones","Esta es la residencia "+'\n'+"de varones, donde "+'\n'+"conviven 110 alumnos"+'\n'+"internos.",34,40);
}

this.mapa.b_come.onPress=function(){
   recorrida("Comedor","La buena comida"+'\n'+"y el ambiente, "+'\n'+"se unen, para que "+'\n'+"pases los mejores"+'\n'+" momentos junto"+'\n'+" a tus amigos",47,48);
}

this.mapa.b_patio.onPress=function(){
   recorrida("Patio Cubierto","Durante la semana"+'\n'+"es patio de juegos y "+'\n'+"salón de actos. Pero"+'\n'+"los fines de semana"+'\n'+"se transforma en "+'\n'+"casa de Dios.",49,52);
}



//Este código se ejecuta cuando apretamos el botón siguiente para ver las fotos

this.botonera.b_next.onPress=function(){
   
   n=n+1;
   conta=conta+1;
   botonera.b_ante.enabled=true;
   if (n>max){
      n=max;
      conta=dif;
      botonera.b_next.enabled=false;
   }
      else{
      var loader:MovieClipLoader = new MovieClipLoader();
      var listener:Object = new Object();
      listener.carga=contenedor.r_conte;
                listener.onLoadInit = function(mc:MovieClip) {
          var bitmap:BitmapData = new BitmapData(mc._width, mc._height, true);
      this.carga.attachBitmap(bitmap, this.carga.getNextHighestDepth(),"auto", true);
                 bitmap.draw(mc);
      
       };
      loader.addListener(listener);
              loader.loadClip("Recorrida/reco-"+n+".jpg",contenedor.r_conte);
      loader.removeListener(listener);
      _root.cantfotos.text=(conta+"/"+dif);
      }
}
//Este código se ejecuta cuando apretamos el botón anterior para ver las fotos

this.botonera.b_ante.onPress=function(){
   n=n-1;
   conta=conta-1;
   botonera.b_next.enabled=true;
   if (n<min){
      botonera.b_ante.enabled=false;
      n=min;
      conta=1;
      }
   else{
      loader.removeListener(listener);
      var loader:MovieClipLoader = new MovieClipLoader();
      var listener:Object = new Object();
      listener.carga=contenedor.r_conte;
                 listener.onLoadInit = function(mc:MovieClip) {
           var bitmap:BitmapData = new BitmapData(mc._width, mc._height, true);
      this.carga.attachBitmap(bitmap, this.carga.getNextHighestDepth(),"auto", true);
            bitmap.draw(mc);
       };
      loader.addListener(listener);
               loader.loadClip("Recorrida/reco-"+n+".jpg",contenedor.r_conte);
      _root.cantfotos.text=(conta+"/"+dif);
      
      }
}

//*******************Botón de Impresión

this.botonera.b_printing.onPress=function(){
   pj = new PrintJob();
   pj.start();
   _root.contenedor.r_conte._xscale=70;
   _root.contenedor.r_conte._yscale=70;
   pj.addPage(contenedor.r_conte,{xMin:0, xMax:800, yMin:0, yMax:600});
   pj.send();
   _root.contenedor.r_conte._width=370;
   _root.contenedor.r_conte._height=277.5;
   delete pj;
}



Por dbarraud

22 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Ago 2008 10:33 pm
Si pudieras resumir una sola función para leer las imágenes sería una solución más optimizada, tienes el mismo código de crear un movieclip loader y leer las imágenes en el contenedor 3 veces de la misma manera.

No hace falta que escribas esta línea:

Código :

listener.carga=contenedor.r_conte;


Cuando el objeto listener capta el evento onLoadInit, recibe el parámetro del movieClip donde se va a leer la imagen (en tu caso "mc") por lo tanto "mc" sería "contenedor.r_conte".

Cuando pongas:

Código :

mc.attachBitmap(bitmap, mc.getNextHighestDepth(),"auto", true);


Cada nuevo bitmap que leas se situará en el nivel más alto del mc por lo tanto se irá cargando este, pon una profundidad fija para que elimines el anterior y lo remplaces por el nuevo:

Código :

mc.attachBitmap(bitmap, 1,"auto", true);


ahora el problema del smooth, tienes puesto cada vez que se carga una imagen:

Código :

mc._height=277.5;
mc._width=370;


La primera vez que cargues una imagen creas un bitmap con las medidas del movieClip contenedor:

Código :

var bitmap:BitmapData = new BitmapData(mc._width, mc._height, true);


Después cambias las medidas del movie contenedor a 370 x 277.5, bueno la segunda vez que leas otra imagen las medidas del bitmap que copiará serán 370 x 277.5 en vez de 800 x 600 como en el principio, así que puedes hacer dos cosas:

1 - Cambias las medidas del "mc" a 800 x 600 antes de crear el Bitmap.
2 - O varías las medidas de contenedor y no las de r_conte, así de esta manera r_conte siempre tendría 800 x 600.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 08 Ago 2008 01:34 pm
Gracias elchininet por la ayuda. He modificado varias cosas que me has dicho, aunque el problema sigue.
Con respecto al tamaño del contenedor, están bién las medidas, porque la imagen original es de 800 x 600, pero cuando la cargo se tiene que adaptar al contenedor que mide 370 x 277.5.
Hago que ponga estas medidas dentro del onLoadInit porque sino la primera vez me carga la foto con un tamaño de 800 x 600 y se escapa de la pantalla.
El problema sigue lamentablemente... La primera vez que selecciono un botón, carga la imagen perfectamente, adaptada al contenedor (370 x 277.5) y suavizada, pero cuando selecciono otro botón que llama a la funcion "Recorrida", carga la imagen del tema seleccionado, pero ya sin suavizado. Es como que no se reinicia la función, habría que hacer que se emule esa función como si se ejecutara por primera vez.
Muchas gracias por estar al tanto de este tema.

Por dbarraud

22 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Ago 2008 02:03 pm
No entendiste muy bien lo que te expliqué, el siguiente código te crea un bitmap del tamaño que le especifiques:

Código :

var bitmap:BitmapData = new BitmapData(mc._width, mc._height, true);


El tamaño que le estás especificando es el tamaño que va a tener contenedor.r_conte.
La primera vez que leas la imagen contenedor.r_conte tiene 800 x 600 por lo que creas un Bitmap de 800 x 600, después escalas contenedor.r_conte a 370 x 277.5 y entra la propiedad de Smooth que entra a jugar papel cuando la imagen se escala o rota. Ahora la segunda vez que ejecutes la función te va a crear un Bitmap de 370 x 277.5 por lo que aunque le digas a contenedor.r_conte que adquiera ese tamaño la imagen no se va a escalar y por lo tanto no va a adquirir la propiedad de smooth.

Recordando mi primer consejo:


1 - Cambias las medidas del "mc" a 800 x 600 antes de crear el Bitmap.


Para que el bitmap que se copie sea de 800 x 600 y después escalado a 370 x 277.5 para que se vea la propiedad de Smooth. Lo que debería traducirse en:

Código :

listener.onLoadInit = function(mc:MovieClip):Void  {
      
      mc._width = 800;
      mc._height = 600;

      var bitmap:BitmapData = new BitmapData(mc._width, mc._height, true);
      
      bitmap.draw(mc);
      mc.attachBitmap(bitmap, 1, "auto", true);
      mc._height = 277.5;
      mc._width = 370;      
      
};

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 09 Ago 2008 11:34 pm
ELCHININET SOS UN GROSO!!!!!!!!!
Funciónó de maravillas, no hay palabras para agradecerte el haber respondido a este post. Muchas gracias hermano, ya tengo las imagenes suvizadas tal cual quería.
Para los que tengan problemas de suvizar las imagenes como yo, ya tienen un post conun código sencillo para aplicarlo en su trabajo.
Gracias nuevamente.!!!!

Por dbarraud

22 de clabLevel



 

firefox

 

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