Regolazione dei colori di un oggetto di visualizzazione

Flash Player 9 e versioni successive, Adobe AIR 1.0 e versioni successive

Potete utilizzare i metodi della classe ColorTransform incorporata (flash.geom.ColorTransform) per modificare il colore di un oggetto di visualizzazione. Ogni oggetto di visualizzazione presenta una proprietà transform che è un'istanza della classe Transform e che contiene informazioni sulle varie trasformazioni applicate all'oggetto di visualizzazione (quali rotazione, modifiche in scala o di posizione e così via). Oltre alle informazioni sulle trasformazioni geometriche, la classe Transform include anche una proprietà colorTransform , che è un'istanza della classe ColorTransform e consente di modificare il colore dell'oggetto di visualizzazione. Per accedere alle informazioni sulle trasformazioni cromatiche di un oggetto di visualizzazione, potete usare un codice come quello riportato di seguito:

var colorInfo:ColorTransform = myDisplayObject.transform.colorTransform;

Una volta creata un'istanza di ColorTransform, potete leggere i valori delle sue proprietà per scoprire quali trasformazioni cromatiche sono già state applicate oppure potete impostare tali valori per apportare modifiche di colore all'oggetto di visualizzazione. Per aggiornare l'oggetto di visualizzazione dopo le modifiche, dovete riassegnare l'istanza di ColorTransform alla proprietà transform.colorTransform .

var colorInfo:ColorTransform = myDisplayObject.transform.colorTransform; 
 
// Make some color transformations here. 
 
// Commit the change. 
myDisplayObject.transform.colorTransform = colorInfo;

Impostazione dei valori di colore con il codice

La proprietà color della classe ColorTransform può essere utilizzata per assegnare un valore di colore rosso, verde, blu (RGB) specifico all'oggetto di visualizzazione. Nell'esempio seguente, la proprietà color viene utilizzata per modificare il colore dell'oggetto di visualizzazione denominato square in blu, quando l'utente fa clic su un pulsante denominato blueBtn :

// square is a display object on the Stage. 
// blueBtn, redBtn, greenBtn, and blackBtn are buttons on the Stage. 
 
import flash.events.MouseEvent; 
import flash.geom.ColorTransform; 
 
// Get access to the ColorTransform instance associated with square. 
var colorInfo:ColorTransform = square.transform.colorTransform; 
 
// This function is called when blueBtn is clicked. 
function makeBlue(event:MouseEvent):void 
{ 
    // Set the color of the ColorTransform object. 
    colorInfo.color = 0x003399; 
    // apply the change to the display object 
    square.transform.colorTransform = colorInfo; 
} 
 
blueBtn.addEventListener(MouseEvent.CLICK, makeBlue);

Tenete presente che quando si modifica il colore di un oggetto di visualizzazione mediante la proprietà color , viene completamente modificato il colore dell'intero oggetto, anche se precedentemente l'oggetto era di più colori. Se, ad esempio, un oggetto di visualizzazione contiene un cerchio verde con un testo nero sopra e la proprietà color dell'istanza di ColorTransform associata a tale oggetto viene impostata su una tonalità di rosso, l'intero oggetto (cerchio e testo compresi) diventa rosso (non è più possibile distinguere il testo dal resto dell'oggetto).

Modifica di effetti di colore e luminosità con il codice

Supponete di avere un oggetto con più colori (ad esempio una foto digitale) e di non desiderare di ricolorare completamente l'oggetto, ma soltanto modificare il colore di un oggetto, a partire dai colori esistenti. In uno scenario di questo tipo, la classe ColorTransform include una serie di proprietà di offset e moltiplicatrici che possono essere incluse per effettuare questo tipo di modifica. Le proprietà moltiplicatrici denominate redMultiplier , greenMultiplier , blueMultiplier e alphaMultiplier funzionano come filtri fotografici colorati (o lenti colorate) e consentono di amplificare o smorzare alcuni colori dell'oggetto di visualizzazione. Le proprietà di offset ( redOffset , greenOffset , blueOffset e alphaOffset ) possono essere utilizzate per aggiungere quantità extra di un determinato colore all'oggetto oppure per specificare il valore minimo che un colore particolare può avere.

Queste proprietà di offset e moltiplicatrici sono identiche alle impostazioni di colore avanzate disponibili per i simboli dei clip filmati nello strumento di creazione di Flash quando si seleziona Avanzato dal menu Colore della finestra di ispezione Proprietà.

Il codice seguente consente di caricare un'immagine JPEG e di applicare una trasformazione del colore che modifica i canali rosso e verde nel momento in cui il puntatore del mouse viene spostato lungo l'asse x e l'asse y. In questo caso, poiché non vengono specificati valori di offset, il valore del colore di ciascun canale visualizzato sullo schermo corrisponde a una percentuale del valore del colore originale dell'immagine; in altre parole, la quantità massima di rosso o verde visualizzata in un dato pixel corrisponde alla quantità originale di rosso o verde di tale pixel.

import flash.display.Loader; 
import flash.events.MouseEvent; 
import flash.geom.Transform; 
import flash.geom.ColorTransform; 
import flash.net.URLRequest; 
 
// Load an image onto the Stage. 
var loader:Loader = new Loader(); 
var url:URLRequest = new URLRequest("http://www.helpexamples.com/flash/images/image1.jpg"); 
loader.load(url); 
this.addChild(loader); 
 
// This function is called when the mouse moves over the loaded image. 
function adjustColor(event:MouseEvent):void 
{ 
    // Access the ColorTransform object for the Loader (containing the image) 
    var colorTransformer:ColorTransform = loader.transform.colorTransform; 
     
    // Set the red and green multipliers according to the mouse position. 
    // The red value ranges from 0% (no red) when the cursor is at the left 
    // to 100% red (normal image appearance) when the cursor is at the right. 
    // The same applies to the green channel, except it's controlled by the 
    // position of the mouse in the y axis. 
    colorTransformer.redMultiplier = (loader.mouseX / loader.width) * 1; 
    colorTransformer.greenMultiplier = (loader.mouseY / loader.height) * 1; 
     
    // Apply the changes to the display object. 
    loader.transform.colorTransform = colorTransformer; 
} 
 
loader.addEventListener(MouseEvent.MOUSE_MOVE, adjustColor);