Flash CS3 - Flash CS4

Free tutorials and scripts for all.
Actionscript 3.0

Metodi getPixel - setPixel della classe BitmapData

This is a discussion on Metodi getPixel - setPixel della classe BitmapData within the Articoli e tutorials forums, part of the Flash CS3 e Actionscript 3.0 category; I nomi di questi due metodi non danno spazio ad equivoci... Sono semplicemente due metodi della classe BitmapData che ricevono ...


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:55
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Metodi getPixel - setPixel della classe BitmapData

I nomi di questi due metodi non danno spazio ad equivoci...
Sono semplicemente due metodi della classe BitmapData che ricevono o impostano un determinato valore RGB.

Il metodo getPixel, vuole 2 parametri:
- la coordinata x del pixel di cui vogliamo recuperare il valore RGB
- la coordinata y del pixel di cui vogliamo recuperare il valore RGB

Il metodo setPixel, vuole 3 parametri:
- la coordinata x del pixel di cui vogliamo impostare il valore RGB
- la coordinata y del pixel di cui vogliamo impostare il valore RGB
- il valore RGB da utilizzare

Vediamo come funzionano...

Creo un FLA che salvo con nome ' scambio.fla ' al cui interno importo 2 immagini e le inserisco in 2 MovieClip a cui assegno nomi istanza' pic_0_mc ' e ' pic_1_mc ' .
Creo la Document Class, un file AS che salvo con nome ' Scambio.as ', implementata in questo modo:
Code:
package
{
	import flash.display.MovieClip;
	import flash.display.BitmapData;
	import flash.display.Bitmap;
	import flash.events.Event;
	
	public class Scambio extends MovieClip
	{
		private var clip:MovieClip;
		
		private var immagine_1:BitmapData;
		private var immagine_2:BitmapData;
		private var copia:BitmapData;
		
		private var bitmap:Bitmap;
		
		private var startX:Number=0;
		private var startY:Number=0;
		private var startW:Number=0;
		private var startH:Number=1;
		
		public function Scambio()
		{
			init();
			crea();
			creaEffetto();
		}
		
		private function init():void
		{
			stage.frameRate=31;
		}
		
		private function crea():void
		{
			immagine_1=new BitmapData(pic_0_mc.width,pic_0_mc.height,true,0xFF000000);
			immagine_1.draw(pic_0_mc);
			immagine_2=new BitmapData(pic_0_mc.width,pic_0_mc.height,true,0xFF000000);
			immagine_2.draw(pic_1_mc);
			
			clip=new MovieClip();
			
			copia=new BitmapData(pic_0_mc.width,pic_0_mc.height,true,0xFFFFFFFF);
			bitmap=new Bitmap(copia);
			clip.addChild(bitmap);
			
			clip.x=stage.stageWidth/2-clip.width/2;
			clip.y=pic_0_mc.y+pic_0_mc.height+50;
			
			addChild(clip);
		}
		
		private function creaEffetto():void
		{
			clip.addEventListener(Event.ENTER_FRAME,effetto1);
			clip.addEventListener(Event.ENTER_FRAME,effetto2);
		}
		
		private function effetto1(e:Event):void
		{
			for(var i:Number=0;i < immagine_1.width;i++)
			{
				startX=i;
				bitmap.bitmapData.setPixel(startX,startY,immagine_1.getPixel(startX,startY));
			}
			startY+=2;
			if(startY>=immagine_1.height)
			{
				e.target.removeEventListener(Event.ENTER_FRAME,effetto1);
			}
		}
		
		private function effetto2(e:Event):void
		{
			for(var i:Number=0;i < immagine_2.width;i++)
			{
				startW=i;
				bitmap.bitmapData.setPixel(startW,startH,immagine_2.getPixel(startW,startH));
			}
			startH+=2;
			if(startH>=immagine_2.height)
			{
				e.target.removeEventListener(Event.ENTER_FRAME,effetto2);
			}
		}
	}
}
risultato:










Analizziamo il codice.

Proprietà:


un' istanza MovieClip dove inserirò la nuova immagine
private var clip:MovieClip;
tre istanze BitmapData
la prima scatterà una foto ( metodo draw() ) alla MovieClip pic_0_mc
la seconda scatterà una foto ( metodo draw() ) alla MovieClip pic_1_mc
la terza sarà la nuova BitmapData che andrò a creare
private var immagine_1:BitmapData;
private var immagine_2:BitmapData;
private var copia:BitmapData;
un' istanza Bimap, che serve per rendere visibile l' istanza BitmapData ( copia )
private var bitmap:Bitmap;
quattro variabili numeriche che serviranno far girare dei cicli
private var startX:Number=0;
private var startY:Number=0;
private var startW:Number=0;
private var startH:Number=1;

Metodi:

init();
imposto il frame rate
stage.frameRate=31;

crea();
creo le due nuove BitmapData ed uso il metodo draw() per scattare una foto alle rispettive MovieClip che ho sullo stage con le immagini all' interno
immagine_1=new BitmapData(pic_0_mc.width,pic_0_mc.height,true,0xF F000000);
immagine_1.draw(pic_0_mc);
immagine_2=new BitmapData(pic_0_mc.width,pic_0_mc.height,true,0xF F000000);
immagine_2.draw(pic_1_mc);
creo una nuova MovieClip
clip=new MovieClip();
creo la terza BitmapData ( mantenendo lo stesso colore dello sfondo del FLA )
copia=new BitmapData(pic_0_mc.width,pic_0_mc.height,true,0xF FFFFFFF);
creo una nuova Bitmap a cui passo la BitmapData ' copia '
bitmap=new Bitmap(copia);
inserisco la Bitmap nella MovieClip ' clip ' o non sarebbe visibile
clip.addChild(bitmap);
posiziono ' clip '
clip.x=stage.stageWidth/2-clip.width/2;
clip.y=pic_0_mc.y+pic_0_mc.height+50;
aggiungo al DisplayObject la MovieClip ' clip ' o non sarebbe visibile
addChild(clip);

creaEffetto();
aggiungo 2 listeners in ascolto dell' evento ENTER_FRAME che a loro volta chiamano due funzioni diverse ( effetto1 ed effetto2 )
clip.addEventListener(Event.ENTER_FRAME,effetto1);
clip.addEventListener(Event.ENTER_FRAME,effetto2);

effetto1();
creo un ciclo che parte da zero ed ha come iterazione massima il valore della larghezza di immagine_1, al cui interno
- imposto la variabile numerica startX uguale a i in modo che nell' arco del ciclo la ' i ' coprirà tutti i valori da zero fino alla massima larghezza di immagine_1
- dico alla BitmapData copia ( che adesso è una proprietà di ' bitmap ' di utilizzare il metodo setPixel a cui passo i valori:
startX che corre sulla larghezza di immagine_1, startY che è sempre a zero ( e con questi due valori dico a Flash le coordinate del pixel su cui voglio agire )
poi come terzo parametro il metodo setPixel vuole un valore RGB che recupero utilizzando getPixel su immagine_1 chea sua volta vuole 2 parametri, startX e startY, le stesse coordinate dello stesso pixel
for(var i:Number=0;i < immagine_1.width;i++)
{
startX=i;
bitmap.bitmapData.setPixel(startX,startY,immagine_ 1.getPixel(startX,startY));
}
incremento startY di 2 in modo da saltare una riga ( in quanto nelle righe pari metterò i pixels di immagine _2 )
startY+=2;
controllo se startY raggiunge il valore dell' altezza di immagine_1, se si fermo l' intervallo
if(startY>=immagine_1.height)
{
e.target.removeEventListener(Event.ENTER_FRAME,eff etto1);
}

effetto2();
stessa cosa di effetto1(), solo che recupero i valori da immagine_2 .

Interessante no ? :)

Stay tuned !
__________________

 


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
Actionscript 3 Uso della proprieta bufferingBar della Classe FLVPlyback jseeker Actionscript 3.0 avanzato 4 13-09-08 15:58
Actionscript 3 Uso della proprieta bufferingBar classe FLVPlayback jseeker Flash CS3 generale 0 10-09-08 09:53
indexOf - metodo della classe Array Flep Articoli e tutorials 2 12-06-08 19:26
Proprietà length della classe sound nextneed Actionscript 3.0 avanzato 4 23-01-08 08:53
getPixel/setPixel methods of the BitmapData Class Flep Tutorials 0 29-09-07 10:04


All times are GMT. The time now is 12:01.


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