archivi di March, 2009




flash, bitmapdata, chroma key (or color key)

Thursday, March 19th, 2009

here’s a routine to apply chroma (color) keying on a bitmapdata.
i’m not sure this is the best way to achieve chroma keying in flash, but it works.

an usage example:
we have imageBitmapData that is an image (imagine a panorama view), and we want to chroma key the blue sky in it. first we define the lower and higher blue values to be cutted off (they can be the same, if we want to chroma key exactly an rgb color and not a range). then we call the chromaKey method.

	
var imageBitmapData:BitmapData = new BitmapData();
//... load or draw here some content in imageBitmapData
var myThresholdHigh:uint = 0xffacc9e5; //AARRGGBB, this is a light blue
var myThresholdLow:uint  = 0xff8aa2b8; //AARRGGBB, this is a dark blue
imageBitmapData = chromaKey(imageBitmapData, myThresholdLow, myThresholdHigh);

and here’s the routine code:

	import flash.display.*;
	import flash.filters.*;
	import flash.geom.*;
	
		//if keepColor = false, returns the original bitmapdata with colors between colorLow and colorHi cutted off, otherwise (keepColor = true) return the inverse, that is the original bitmapdata with only colors from colorLow to colorHi
		public static function chromaKey(myBitmapData:BitmapData, colorLow:uint, colorHi:uint, keepColor:Boolean = false):BitmapData
		{
			if ( keepColor )
			{
				//throw away pixels not in my color range
				//red
				myBitmapData.threshold(
					myBitmapData,
					new Rectangle(0, 0, myBitmapData.width, myBitmapData.height),
					new Point(0,0),
					\"< \",
					colorLow,
					0x00000000,
					0x00FF0000,
					false
					);
				myBitmapData.threshold(
					myBitmapData,
					new Rectangle(0, 0, myBitmapData.width, myBitmapData.height),
					new Point(0,0),
					\">“,
					colorHi,
					0×00000000,
					0×00FF0000,
					false
					);
				//green
				myBitmapData.threshold(
					myBitmapData,
					new Rectangle(0, 0, myBitmapData.width, myBitmapData.height),
					new Point(0,0),
					“< \",
					colorLow,
					0x00000000,
					0x0000FF00,
					false
					);
				myBitmapData.threshold(
					myBitmapData,
					new Rectangle(0, 0, myBitmapData.width, myBitmapData.height),
					new Point(0,0),
					\">“,
					colorHi,
					0×00000000,
					0×0000FF00,
					false
					);
				//blue
				myBitmapData.threshold(
					myBitmapData,
					new Rectangle(0, 0, myBitmapData.width, myBitmapData.height),
					new Point(0,0),
					“< \",
					colorLow,
					0x00000000,
					0x000000FF,
					false
					);
				myBitmapData.threshold(
					myBitmapData,
					new Rectangle(0, 0, myBitmapData.width, myBitmapData.height),
					new Point(0,0),
					\">“,
					colorHi,
					0×00000000,
					0×000000FF,
					false
					);
			}
			else
			{
				//throw away pixels in my color range
				//red
				var myBitmapDataRedLow:BitmapData = new BitmapData(myBitmapData.width, myBitmapData.height);
				myBitmapDataRedLow = myBitmapData.clone();
				myBitmapDataRedLow.threshold(
					myBitmapData,
					new Rectangle(0, 0, myBitmapData.width, myBitmapData.height),
					new Point(0,0),
					“>=”,
					colorLow,
					0×00000000,
					0×00FF0000,
					false
					);
				var myBitmapDataRedHigh:BitmapData = new BitmapData(myBitmapData.width, myBitmapData.height);
				myBitmapDataRedHigh = myBitmapData.clone();
				myBitmapDataRedHigh.threshold(
					myBitmapData,
					new Rectangle(0, 0, myBitmapData.width, myBitmapData.height),
					new Point(0,0),
					“< =\",
					colorHi,
					0x00000000,
					0x00FF0000,
					false
					);
				//merge low and hi
				myBitmapDataRedLow.draw(myBitmapDataRedHigh,null,null,BlendMode.MULTIPLY,null,false);
				//green
				var myBitmapDataGreenLow:BitmapData = new BitmapData(myBitmapData.width, myBitmapData.height);
				myBitmapDataGreenLow = myBitmapData.clone();
				myBitmapDataGreenLow.threshold(
					myBitmapData,
					new Rectangle(0, 0, myBitmapData.width, myBitmapData.height),
					new Point(0,0),
					\">=”,
					colorLow,
					0×00000000,
					0×0000FF00,
					false
					);
				var myBitmapDataGreenHigh:BitmapData = new BitmapData(myBitmapData.width, myBitmapData.height);
				myBitmapDataGreenHigh = myBitmapData.clone();
				myBitmapDataGreenHigh.threshold(
					myBitmapData,
					new Rectangle(0, 0, myBitmapData.width, myBitmapData.height),
					new Point(0,0),
					“< =\",
					colorHi,
					0x00000000,
					0x0000FF00,
					false
					);
				//merge low and hi
				myBitmapDataGreenLow.draw(myBitmapDataGreenHigh,null,null,BlendMode.MULTIPLY,null,false);
				//blue
				var myBitmapDataBlueLow:BitmapData = new BitmapData(myBitmapData.width, myBitmapData.height);
				myBitmapDataBlueLow = myBitmapData.clone();
				myBitmapDataBlueLow.threshold(
					myBitmapData,
					new Rectangle(0, 0, myBitmapData.width, myBitmapData.height),
					new Point(0,0),
					\">=”,
					colorLow,
					0×00000000,
					0×000000FF,
					false
					);
				var myBitmapDataBlueHigh:BitmapData = new BitmapData(myBitmapData.width, myBitmapData.height);
				myBitmapDataBlueHigh = myBitmapData.clone();
				myBitmapDataBlueHigh.threshold(
					myBitmapData,
					new Rectangle(0, 0, myBitmapData.width, myBitmapData.height),
					new Point(0,0),
					“< =\",
					colorHi,
					0x00000000,
					0x000000FF,
					false
					);
				//merge low and hi
				myBitmapDataBlueLow.draw(myBitmapDataBlueHigh,null,null,BlendMode.MULTIPLY,null,false);
	
				//merge channels in output bitmapdata
				myBitmapData = new BitmapData(myBitmapData.width, myBitmapData.height, true, 0x00000000);
				myBitmapData.draw(myBitmapDataRedLow,null,null,BlendMode.MULTIPLY,null,false);
				myBitmapData.draw(myBitmapDataGreenLow,null,null,BlendMode.MULTIPLY,null,false);
				myBitmapData.draw(myBitmapDataBlueLow,null,null,BlendMode.MULTIPLY,null,false);
	
			}
			return myBitmapData;
		}
	





justice

Monday, March 16th, 2009

un video penzo:

e la degna risposta:

lo sfottò, la presa in giro, l’ironia insomma, è uno dei meccanismi sociali spontanei che rendono gli uomini un pelino migliori di quello che sono. e più uno si prende sul serio, più provoca involontariamente l’ironia.






mangiare invece di uccidere

Monday, March 16th, 2009

è ufficiale, dopo decenni il più radicato e inamovibile luogo comune, nonchè meccanismo, dei videogiochi ha finalmente un’alternativa credibile. non è più necessario schiacciare bottoni per uccidere il prossimo, ma è ora necessario schiacciare bottoni per mangiare ed evolvere. tecnicamente non cambia nulla, più si schiaccia, più si va avanti, più si diventa complessi, più si possono affrontare creature potenti. ma a livello filologico è una piccola rivoluzione. ecco 2 citazioni giusto per…:



Blush Trailer from Flashbang Studios on Vimeo.


e per finire la solita presa per il culo che non guasta.






chitarre e flash

Monday, March 16th, 2009

Andre Michelle è forse il più prolifico e famoso programmatore audio della piattaforma flash. Il suo pupillo è audiotool, ma tutto il suo lab è pieno di cose meravigliose, e questo sintetizzatore di chitarra appena partorito, basato sul modello fisico Karplus Strong per la sintesi di stringhe, è semplicemente incredibile.






quando non serve denudarsi per esprimere stile e sensualità

Monday, March 16th, 2009

godard “Band a Part”

nouvelle vague “dance with me”

godard “vivre sa vie”

nouvelle vague “dancing with myself”

il genio “pop porno”






pubblicità-performance in pubblico

Monday, March 16th, 2009



T-Mobile (Saatchi & Saatchi)



improveverywhere






fotosciòp

Wednesday, March 11th, 2009

prima o poi morirà pure lui. ci si sta avvicinando speditamente a tool online sostitutivi. certo, non hanno che un centesimo delle funzionalità di fotosciòp, ma per il 99% degli utenti mondiali di fotosciòp questo basta e avanza. quand’è che anche adobe metterà online i suoi pacchettoni? un bel fotosciòp in cui pago a ore di utlizzo? per esempio faccio la brochure per il cliente, uso 8 ore di fotosciòp, e pago solo le mie 8 ore e non 1000 e passa euro di pacchetto? anche perchè le mie 8 ore le metto in fattura al cliente come costo sostenuto, e nessuno fa una piega… invece no, andiamo avanti a vendere pacchetti da migliaia di euro, di cui non si usa che una ridicola percentuale di funzionalità, di cui serve occupare spazio con la scatola, serve abbattere alberi per il manuale, serve impastare il computer con l’installazione, serve inserire codici per l’autenticazione, serve ricomprare tutto ogni 2 anni perchè è uscita la versione nuova e senza la versione nuova siamo dei nulla, degli sfigati, dei cinghios dell’informatica (”te usi ancora la cs3? ma sei un cinghios! io c’ho la cs4, 36 giga di installazione, una bomba”).

io, per la cronaca, non ho mai usato niente oltre fotosciòp 7, in cui peraltro non ho mai trovato pecche o mancanze nonostante pesasse 10 volte meno della serie cs, e da qualche mese ho mollato pure quello per abbracciare gimp 2.6 che comincia ad essere davvero robusto e usabile (certo, gli manca la quadricromia, ma per noi uomini del web chissenfruà).



Tuto : Gimp pour la retouche photo
by virusphoto





video

Wednesday, March 11th, 2009

mi sono accorto che ormai, quando faccio una ricerca sul web, sempre più spesso parto da una ricerca video piuttosto che testuale (da google video, che linka i video di tutti i principali portali video). per esempio, voglio comprare il neo freerunner? trovo dozzine di video con prove e test. voglio capire come funziona il nuovo servizio EC2 di cloud computing di amazon? trovo il video con qualcuno che mostra come si registra al servizio e come fa il boot di una macchina virtuale. il meccanismo funziona talmente bene che ormai sono i siti ufficiali (del prodotto, del servizio, insomma, dell’oggetto della nostra ricerca) a dover sbattere un video in homepage, altrimenti il visitatore sorvola. se è vero che un’immagine vale più di mille parole, un video di 5 minuti a 30 fps vale più di 9000 immagini, ovvero più di 9 milioni di parole… insomma il testo scritto, giusto per dire una banalità, non se lo caga più nessuno.

una nicchia (ma le nicchie sono infinite, in questo scenario) in cui di materiale ce n’è poco seppur utilissimo, sono le ricette. se cerchi “ricetta carciofi” su google sei subissato da 320.000 risultati, ma se cerchi “ricetta carciofi” su google video i risultati sono solo 62. non devo stare a spiegarvi i vantaggi di vedere un video di 4 minuti che mi spiega come si fa un piatto, piuttosto che una descrizione testuale. il territorio insomma è vergine, “ricetta cavolfiore” è a quota 19 video contro 120.000 pagine web, “ricetta astice” conta 7 video contro 34.000 pagine, e per finire “ricetta cachi” non ha ancora video… mi viene un’idea :-D

io ieri sera ho provato questa:


non è uscita malaccio, ma temo di aver sbagliato pentola.