¿Quieres registrarte?

Borrar o recortar una imagen en Actionscript 3

Por: Otaku RzO
12 de Mayo del 2010

En ocasiones hemos tenido la necesidad de quitar una parte de una imagen, para esto usualmente usamos mascaras, pero cuando se trate de una imagen tenemos otra opción con la ayuda de BlendMode.ERASE .

Código :

bitmapData1.draw( bitmapData2, null, null, BlendMode.ERASE);

Donde bitmapData1 es un BitmapData con la imagen que queremos recortar o borrar, y bitmapData2 es la imagen o clip con la forma deseada para el borrado.

Ahora que ya sabemos como borrar una parte de la imagen podemos jugar con sus 2 tipos de uso para simular un recorte, veamos como trabaja esto con un ejemplo:

Tenemos 2 botones, una foto cualquiera y otro clip que nos servirá para borrar la imagen. En este ejemplo lo que recortaré serán los ojos y la boca.


Código :

package  
{
   import flash.display.Bitmap;
   import flash.display.BitmapData;
   import flash.display.BlendMode;
   import flash.display.Sprite;
   import flash.events.MouseEvent;
   import flash.geom.Matrix;
   import flash.geom.Rectangle;
   
   public class ClabCut extends Sprite
   {
      private var content_mc:Sprite;
      
      public function ClabCut() 
      {
         content_mc = new Sprite();
         addChild( content_mc );
         
         mode1_btn.addEventListener(MouseEvent.CLICK, mode1ClickHandler);
         mode2_btn.addEventListener(MouseEvent.CLICK, mode2ClickHandler);
      }
      
      private function mode1ClickHandler(e:MouseEvent):void 
      {
         photo_mc.visible = false;
         eyes_mc.visible = false;

         // Hacemos una captura del clip a borrar
         var bmpPhoto:BitmapData = new BitmapData(photo_mc.width, photo_mc.height, true, 0x00);
         bmpPhoto.draw( photo_mc );
         
         // Hacemos el borrado y con una matriz mantenemos la ubicación
         bmpPhoto.draw( eyes_mc, new Matrix(1,0,0,1, eyes_mc.x - photo_mc.x, eyes_mc.y - photo_mc.y ), null, BlendMode.ERASE);
         
         // Limpiamos el contenedor y el resultado
         while ( content_mc.numChildren > 0 ) content_mc.removeChildAt(0);
         content_mc.addChild( new Bitmap(bmpPhoto) );
      }
      
      private function mode2ClickHandler(e:MouseEvent):void 
      {
         // Lo mismo que en el Modo1...
         
         photo_mc.visible = false;
         eyes_mc.visible = false;

         var bmpPhoto:BitmapData = new BitmapData(photo_mc.width, photo_mc.height, true, 0x00);
         bmpPhoto.draw( photo_mc );
         bmpPhoto.draw( eyes_mc, new Matrix(1,0,0,1, eyes_mc.x - photo_mc.x, eyes_mc.y - photo_mc.y ), null, BlendMode.ERASE);
         
         // ... Aquí se hace un borrado más para obtener el otro recorte
            // Hacemos una captura del clip a borrar (El mismo del inicio)
            var bmpEyes:BitmapData = new BitmapData(photo_mc.width, photo_mc.height, true, 0x00);
            bmpEyes.draw( photo_mc );
            
            // Hacemos el borrado y no nos preocupamos por la matriz porque la imagen ya es del mismo tamaño
            bmpEyes.draw( new Bitmap(bmpPhoto), null, null, BlendMode.ERASE);
         //--
         
         while ( content_mc.numChildren > 0 ) content_mc.removeChildAt(0);
         content_mc.addChild( new Bitmap(bmpEyes) );
      }
      
   }

}

Archivos del Ejemplo

 


También te interesa


Etiquetas efectos actionscript_3 bitmap

Comentarios | Enviar un comentario
Muy buen tip Rzo, en lo personal me encanta el manejo de bitmap y temas relacionados. Similar a lo que había estado haciendo con algunos tile based games, excelente aporte (:

El tip ya está editado y así, en cualquier momento pasará a portada.. aunque por curiosidad ¿qué se traen con las fotos de freddie? O:
Por: M@U
es que si haces un tutorial utilizando la cara de freddy pasas a la portada más rápido =P
(jajajjaa xD)
Por: juanjosehzgs
Excelente Tip Otaku.
Por: Dano
muy bueno
Por: eldervaz
Buen tip Otaku (y)
Por: Zguillez
de lux +1
Por: carnicero-blog
Otaku++;
Buen tip... ahora a buscar otras fotos de Freddie para seguir probando.... XD
Por: Camuss
Muy buen tip. Esto es siempre útil, sobre todo aquellas apps web que hacen el trabajo por tí
Por: AzrL
Buen tip... Aunque no se de que trate... :P - Te Apoyo!
Por: Ronald Castro-blog
Muy buen tip...

Quisiera saber si hay algún recurso para recortar una parte de una imagen. O sea, partiendo de una imagen tomada con una web-cam (como la del tip), luego y sin mover la cam, tomamos otra pero sin el personaje, para luego "restar" los dos bitmaps, y vouala!, tenemos sólo la cara y podemos poner en el fondo cualquier otro relleno...
Un cliente me preguntó si eso se puede hacer; y yo no sé XP
Por: DiegoVelevu
Esta bien doctor, que enseñes las abilidades, cuando nos reunimos para darle mantenimiento a mi pagina.

saludos
cuidate
Por: Ulises-blog
Felicitaciones por la pagina..!!!! sigue asi... compartiendo la informacion... El que no nace para servir , no sirve para vivir!!.
Por: JZThePunisher-blog
Deja un comentario
IMPORTANTE

Recuerda ser respetuoso, no insultes a otras personas, ni uses palabrotas, hay una persona al otro lado de la pantalla.

Habla bien, NO ESCRIBAS EN MAYUSCULA TODO, no escribas como en un SMS, evita cosas como "ke", "x q" y demás abreviaciones.

Aquí funcionan las etiquetas de los foros, puedes usar [b] para negrita, [img] para las imágenes, [url] para los enlaces, etc.

Si tienes preguntas técnicas, envíalas mejor al foro.