Flash CS3 - Flash CS4

Free tutorials and scripts for all.
Actionscript 3.0

Tagliare un' immagine con la classe Matrix di Actionscript 3.0

This is a discussion on Tagliare un' immagine con la classe Matrix di Actionscript 3.0 within the Articoli e tutorials forums, part of the Flash CS3 e Actionscript 3.0 category; Tagliare un' immagine ? Qualcuno di voi, magari abituato a tagliare le immagini con un editor tipo FireWorks o PhotoShop, si ...


Go Back   Forum Flash CS3 Flash CS4 > Flash CS3 e Actionscript 3.0 > Articoli e tutorials

Register FAQ Members List Calendar Search Today's Posts Mark Forums Read
  1 links from elsewhere to this Post. Click to view. #1 (permalink)  
Old 20-09-07, 10:00
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,446
Rep Power: 6
Flep is on a distinguished road
Tagliare un' immagine con la classe Matrix di Actionscript 3.0

Tagliare un' immagine ? Qualcuno di voi, magari abituato a tagliare le immagini con un editor tipo FireWorks o PhotoShop, si starà chiedendo....ma è possibile tagliare un' immagine con Actionscript...?
Certo che lo è !
In questo esempio, utilizzando la classe Matrix e BitmapData, taglio un' immagine in tanti pezzetti ed ogni pezzetto lo converto in MovieClip a cui poi applico un effetto.
Come ?

Vediamolo...

Creo un FLA che salvo con nome ' matrix.fla '.
Importo un' immagine nella libreria, la trascino sullo Stage, la converto in MovieClip e gli assegno nome istanza ' image_mc ' .
Creo la Document Class, un file AS che salvo con nome ' Taglio.as ', così implementata:
Code:
package
{
    import flash.display.MovieClip;
    import flash.display.BitmapData;
    import flash.display.Bitmap;
    import flash.geom.Point;
    import flash.geom.Matrix;
    import flash.utils.Timer;
    import flash.events.TimerEvent;
    import fl.transitions.*;
    import fl.transitions.easing.*;
    
    public class Taglio extends MovieClip
    {
        private var clips_array:Array;
        
        private var righe:int=10;
        private var colonne:int=10;
        
        private var timer:Timer;
        private var t_e:TimerEvent;
        
        public function Taglio()
        {
            init();
            taglia();
            startTimer(t_e);
        }
        
        private function init():void
        {
            stage.frameRate=31;
            
            image_mc.visible=false;
            
            clips_array=new Array();
        }
        
        private function taglia():void
        {
            var ww:int=Math.ceil(image_mc.width/righe);
            var hh:int=Math.ceil(image_mc.height/colonne);
            var mat:Matrix;
            var bitmap_data:BitmapData;
            var point:Point;
            var clip:MovieClip;
            
            for(var i:int=0;i < colonne;i++)
            {
                for(var j:int=0;j < righe;j++)
                {
                    bitmap_data=new BitmapData(ww,hh,true,0x00FFFFFF);
                    mat=image_mc.transform.matrix;
                    mat.translate(-ww*j,-hh*i);
                    bitmap_data.draw(image_mc,mat);
                    
                    clip=new MovieClip();
                    clips_array.push(clip);
                    addChild(clip);
                    point=new Point(image_mc.x+ww*j+1*j,image_mc.y+hh*i+1*i);
                    
                    var bitmap:Bitmap=new Bitmap(bitmap_data);
                    clip.addChild(bitmap);
                    clip.x=point.x;
                    clip.y=point.y;
                }
            }
        }
        
        private function callStartTimer():void
        {
            timer=new Timer(4000,1);
            timer.addEventListener(TimerEvent.TIMER,startTimer);
            timer.start();
        }
        
        private function startTimer(t:TimerEvent):void
        {
            timer=new Timer(10,clips_array.length);
            timer.addEventListener(TimerEvent.TIMER,abbaglia);
            timer.addEventListener(TimerEvent.TIMER_COMPLETE,finito);
            timer.start();
        }
        
        private function abbaglia(t:TimerEvent):void
        {
            TransitionManager.start(clips_array[t.target.currentCount-1],
            {type:Photo,direction:Transition.IN,duration:.5,easing:Strong.easeOut});
        }
        
        private function finito(t:TimerEvent):void
        {
            callStartTimer();
        }
    }
}
Senza script





Con lo script:







Analizziamo il codice:

vorrei porre l' attenzione sul metodo taglia()
creo 2 variabili numeriche a cui assegno il valore rispettivamente di: width dell' immagine diviso il numero delle righe e height dell' immagine diviso il numero delle colonne
var ww:int=Math.ceil(image_mc.width/righe);
var hh:int=Math.ceil(image_mc.height/colonne);

creo 4 istanze: Matrix, BitmapData, Point, MovieClip
var mat:Matrix;
var bitmap_data:BitmapData;
var point:Point;
var clip:MovieClip;

implemento 2 cicli innestati
for(var i:int=0;i < colonne;i++)
{
for(var j:int=0;j < righe;j++)
{

al cui interno per ogni iterazione
creo una nuova BitmapData
bitmap_data=new BitmapData(ww,hh,true,0x00FFFFFF);
assegno una nuova matrice alla matrice dell' immagine che ho sullo stage
mat=image_mc.transform.matrix;
faccio traslare la matrice del valore di ww e hh moltiplicato per il numero dell' iterazione del momento
mat.translate(-ww*j,-hh*i);
scatto una foto all' immagine sullo Stage usando il metodo draw() e passandogli come parametro la nuova matrice che ho traslato
bitmap_data.draw(image_mc,mat);
creo una nuova MovieClip
clip=new MovieClip();
la inserisco in un Array
clips_array.push(clip);
la aggiungo al DIspayObject ( o non sarebbe visibile )
addChild(clip);
creo una istanza di Point a cui assegno come coordinate: la X dell' immagine sullo Stage + ww moltiplicato per l' iterazione del ciclo del momento+ 1 pixel moltiplicato per l' iterazione del ciclo del momento..stessa cosa per la y del punto
point=new Point(image_mc.x+ww*j+1*j,image_mc.y+hh*i+1*i);
assegno la BitmapData ad una istanza della classe Bitmap ( per poter poi aggiungere la Bitmap al DisplayObject o non sarebbe visibile )
var bitmap:Bitmap=new Bitmap(bitmap_data);
ecco che aggiungo la Bitmap al DisplayObject
clip.addChild(bitmap);
assegno un valore di X e Y alla clip che contiene il pezzettino di immagine ( valori che sono la X e Y dell' istanza Point )
clip.x=point.x;
clip.y=point.y;


Enjoy !!
__________________

 


I recommend: Essential Actionscript 3.0

- Non rispondo ai messaggi privati con domande tecniche. Apri una discussione sul forum !
- I do not reply technicians pvt messages. Open a thread !
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

Reply

Bookmarks

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is On
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump

Similar Threads

Thread Thread Starter Forum Replies Last Post
Slicing an image with the Matrix Class of Actionscript 3.0 Flep Tutorials 7 17-11-08 01:48
Da SWF a immagine PNG con la classe ByteArray Flep Articoli e tutorials 33 01-11-08 19:40
Actionscript 3.0 e la classe Timer Flep Articoli e tutorials 7 27-07-08 14:22
getDefinitionByName classe di Actionscript 3.0 Flep Articoli e tutorials 0 03-12-07 06:40
Immagine in negativo con Actionscript 3.0 Flep Articoli e tutorials 0 20-09-07 13:07


All times are GMT. The time now is 15:09.


Powered by vBulletin versione 3.7.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0 RC4
Forum SiteMap


FlepStudio
by Filippo Lughi
P.IVA 03605860406