Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 37 di 51
  • livello principiante
Indice lezioni

Utilizzo di ColorMatrixFilter

In questa lezione andiamo a vedere come regolare colori e trasparenza, su una fotografia, agendo sui canali RGB e alpha
In questa lezione andiamo a vedere come regolare colori e trasparenza, su una fotografia, agendo sui canali RGB e alpha
Link copiato negli appunti

Il ColorMatrixFilter, introdotto con il Flash Player 8, è uno strumento molto utile e flessibile: permette di applicare dei cambiamenti di colore ed alpha ad ogni pixel di una bitmap o di un MovieClip. Un esempio molto interessante delle potenzialità di questo filtro è la ColorMatrix demo del sito Quasimondo.

La trasformazione di ogni colore è descritta con una matrice, da utilizzare poi come costruttore per la classe ColorMatrixFilter. La matrice è di questo tipo:

Listato 50. Matrice dei colori

var matrix = new Array();

matrix = matrix.concat([1, 0, 0, 0, 0]); // rosso
matrix = matrix.concat([0, 1, 0, 0, 0]); // verde
matrix = matrix.concat([0, 0, 1, 0, 0]); // blu
matrix = matrix.concat([0, 0, 0, a, 0]); // alpha

I 20 elementi della matrice sono utilizzati per calcolare i nuovi valori di colori ed alpha, in questo modo:

rosso = a[0] * srcR + a[1] * srcG + a[2] * srcB + a[3] * srcA + a[4]
verde = a[5] * srcR + a[6] * srcG + a[7] * srcB + a[8] * srcA + a[9]
blu = a[10] * srcR + a[11] * srcG + a[12] * srcB + a[13]* srcA + a[14]
alpha = a[15] * srcR + a[16] * srcG + a[17] * srcB + a[18] * srcA + a[19]

Dove srcR, srcG, srcB e srcA sono le componenti di colore di ogni pixel del movieclip/bitmap a cui andiamo ad applicare il filtro.

Per modificare solo l'alpha, possiamo sfruttare il primo codice visto per questo filtro, dove tutti i colori vengono impostati su 1 e solo l'alpha viene stabilita in base a una variabile (a).

Prima di utilizzare questo filtro su una skin, facciamo un piccolo esempio del suo funzionamento utilizzando un MovieClip. Notiamo che, quando applichiamo questo filtro, la proprietà cacheAsBitmap del MovieClip viene impostata automaticamente su true. Quando questo filtro viene applicato a una bitmap ne viene calcolata una nuova e l'originale non subisce modifiche.

Regolare colori e trasparenza

Per prima cosa dobbiamo importare il filtro nel nostro filmato, usando import flash.filters.*. In questo esempio modificheremo sia i colori che la trasparenza, per cui inseriamo sullo stage quattro diversi slider. Nei prossimi esempi in alcuni casi il codice verrà "abbreviato", poiché, ormai, abbiamo visto più volte i passaggi comuni ed è quindi inutile riproporli ogni volta, allungando inutilmente la lettura.

Vediamo come creare il nostro esempio per utilizzare il ColorMatrixFilter. Per prima cosa impostiamo lo stage:

Listato 51. Crea la scena e aggiunge il movieClip "rose"

function init(){
    //Qui inseriamo il codice per creare mondo e camera, come nei casi precedenti
    
    // Quindi aggiungiamo questo codice
    this.attachMovie("rose","rose",this.getNextHighestDepth());
    filter = createFilter();
    rose.filters = new Array( filter );
    setUpControls();
}

Inseriamo sullo stage il movieclip "rose" che abbiamo in libreria, quindi, creiamo un filtro (vedremo dopo la funzione createFilter) e lo associamo al nostro movieclip. Ricordiamo che la proprietà filters, dei movieclip, è un array, ciò significa che possiamo associare, contemporaneamente, più di un filtro alla stessa clip. Come ultima cosa chiamiamo la funzione setUpControls, che gestirà i diversi slider:

Listato 52. Imposta gli slider per il movieClip "rose" (Guarda il codice completo)

function setUpControls(){
    var alphaCh:Object = new Object();
    alphaText.text = alpha;
    alphaCh.onChange = function(evt:Object){
        alpha = evt.value;
        alphaText.text = alpha;
        setFilter();
    }
    alphaSlider.addListener(alphaCh);
    ..//
}

Ovviamente il codice è molto simile, dato che tutti gli slider faranno le stesse operazioni.

La funzione setFilter richiamata da ogni lister si occupa di aggiornare l'array di filtri del movieclip, creando il filtro con le nuove proprietà. Il codice è il seguente:

function setFilter(){
    rose.filters = new Array(createFilter());
}

La funzione che si occupa di creare la matrice coi nuovi colori è createFilter:

Listato 53. Crea la matrice con i nuovi colori

function createFilter():BitmapFilter{
    var r:Number = red;
    var g:Number = green;
    var b:Number = blue;
    var a:Number = alpha;
    
    // Creiamo la matrice
    var matrix = new Array();
    matrix = matrix.concat([r, 0, 0, 0, 0]); // red channel
    matrix = matrix.concat([0, g, 0, 0, 0]); // green channel
    matrix = matrix.concat([0, 0, b, 0, 0]); // blue channel
    matrix = matrix.concat([0, 0, 0, a, 0]); // alpha channel
    
    // Creiamo il ColorMatrixFilter
    var filter:BitmapFilter = new ColorMatrixFilter( matrix );
    // Restituiamo il filtro
    return filter;
}

Ed ecco finalmente il risultato:

Esempio di utilizzo del ColorMatrixFilter

"© Petit Publications 2006" - diritti riservati

Ti consigliamo anche