Pacchetto | flash.filters |
Classe | public final class ColorMatrixFilter |
Ereditarietà | ColorMatrixFilter BitmapFilter Object |
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 1.0, Flash Player 9 |
Nota: per i valori RGBA, il byte più significativo rappresenta il valore del canale rosso seguito da quello verde, dal blu e da alfa.
Per creare un nuovo filtro matrice colore, utilizzate la sintassi new ColorMatrixFilter()
. L'uso dei filtri dipende dall'oggetto a cui il filtro viene applicato:
- per applicare i filtri a clip filmato, campi di testo, pulsanti e video, utilizzate la proprietà
filters
(ereditata da DisplayObject). L'impostazione della proprietàfilters
di un oggetto non modifica l'oggetto ed è possibile eliminare il filtro cancellando la proprietàfilters
. - Per applicare filtri a oggetti BitmapData, utilizzate il metodo
BitmapData.applyFilter()
. Quando si chiamaapplyFilter()
su un oggetto BitmapData, vengono acquisiti l'oggetto BitmapData di origine e l'oggetto filtro e viene generata un'immagine filtrata come risultato.
Se applicate un filtro a un oggetto di visualizzazione, la proprietà cacheAsBitmap
dell'oggetto viene impostata su true
. Se eliminate tutti i filtri, viene ripristinato il valore originale di cacheAsBitmap
.
Un filtro non viene applicato se l'immagine risultante supera le dimensioni massime. In AIR 1.5 e Flash Player 10, la dimensione massima è di 8.191 pixel in larghezza o altezza, mentre il numero totale di pixel non può essere superiore a 16.777.215, pertanto se un'immagine ha una larghezza di 8.191 pixel, può avere solo una lunghezza di 2.048 pixel. In Flash Player 9 e versioni precedenti e in AIR 1.1 e versioni precedenti, la limitazione è di 2.880 pixel in altezza e 2.880 pixel in larghezza. Se, ad esempio, ingrandite un clip filmato di grandi dimensioni quando il filtro è applicato, il filtro viene disattivato se l'immagine risultante raggiunge le dimensioni massime.
Elementi API correlati
flash.display.BitmapData.applyFilter()
flash.display.DisplayObject.filters
flash.display.DisplayObject.cacheAsBitmap
Proprietà | Definito da | ||
---|---|---|---|
constructor : Object
Un riferimento all'oggetto classe o alla funzione di costruzione per una determinata istanza di oggetto. | Object | ||
matrix : Array
Un array di 20 elementi per la trasformazione di colore 4 x 5. | ColorMatrixFilter |
Metodo | Definito da | ||
---|---|---|---|
ColorMatrixFilter(matrix:Array = null)
Inizializza una nuova istanza ColorMatrixFilter con i parametri specificati. | ColorMatrixFilter | ||
[override]
Restituisce una copia di questo oggetto filtro. | ColorMatrixFilter | ||
Indica se per un oggetto è definita una proprietà specifica. | Object | ||
Indica se un'istanza della classe Object si trova nella catena di prototipi dell'oggetto specificato come parametro. | Object | ||
Indica se la proprietà specificata esiste ed è enumerabile. | Object | ||
Imposta la disponibilità di una proprietà dinamica per le operazioni cicliche. | Object | ||
Restituisce la rappresentazione in formato stringa di questo oggetto, formattato in base alle convenzioni specifiche per le versioni localizzate. | Object | ||
Restituisce la rappresentazione in formato stringa dell'oggetto specificato. | Object | ||
Restituisce il valore di base dell'oggetto specificato. | Object |
matrix | proprietà |
matrix:Array
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 1.0, Flash Player 9 |
Un array di 20 elementi per la trasformazione di colore 4 x 5. La proprietà matrix
non può essere modificata variandone direttamente il valore (ad esempio, myFilter.matrix[2] = 1;
). È necessario invece ottenere un riferimento all'array, apportare la modifica al riferimento e reimpostare il valore.
Il filtro matrice colore separa ogni singolo pixel di origine nei relativi componenti di rosso, verde, blu e alfa sotto forma di srcR, srcG, srcB, srcA. Per calcolare il risultato di ciascuno dei quattro canali si moltiplica il valore di ogni pixel dell'immagine per i valori della matrice di trasformazione. In via facoltativa è possibile aggiungere a ogni risultato (il quinto elemento in ogni riga della matrice) un offset compreso tra -255 e 255. Il filtro ricombina ogni componente di colore in un singolo pixel e scrive il risultato. Nella formula seguente, i valori da [0] a [19] corrispondono agli elementi da 0 a 19 nell'array di 20 elementi che viene passato alla proprietà matrix
:
redResult = (a[0] * srcR) + (a[1] * srcG) + (a[2] * srcB) + (a[3] * srcA) + a[4] greenResult = (a[5] * srcR) + (a[6] * srcG) + (a[7] * srcB) + (a[8] * srcA) + a[9] blueResult = (a[10] * srcR) + (a[11] * srcG) + (a[12] * srcB) + (a[13] * srcA) + a[14] alphaResult = (a[15] * srcR) + (a[16] * srcG) + (a[17] * srcB) + (a[18] * srcA) + a[19]
Per ogni valore di colore dell'array, il valore 1 equivale all'invio del 100% di quel canale all'output, conservando il valore del canale di colore.
I calcoli vengono eseguiti su valori di colore non moltiplicati. Se l'elemento grafico di input è composto da valori di colore premoltiplicati, per questa operazione tali valori vengono automaticamente convertiti in valori di colore non moltiplicati.
Sono disponibili due modalità ottimizzate:
Solo alfa. Quando al filtro viene passata una matrice che regola solo il componente alfa, come illustrato di seguito, vengono ottimizzate le prestazioni del filtro:
1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 N 0 (where N is between 0.0 and 1.0)
Versione più veloce. Disponibile solo con i processori abilitati per l'acceleratore SSE/AltiVec quali Intel® Pentium® 3 e versioni successive e Apple® G4 e versioni successive. L'acceleratore viene utilizzato quando i valori da moltiplicare sono compresi tra -15,99 e 15,99 e i valori a[4], a[9], a[14] e a[19] da sommare sono compresi tra -8000 e 8000.
Implementazione
public function get matrix():Array
public function set matrix(value:Array):void
Genera
TypeError — Quando viene impostato, l'array è null.
|
ColorMatrixFilter | () | Funzione di costruzione |
public function ColorMatrixFilter(matrix:Array = null)
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 1.0, Flash Player 9 |
Inizializza una nuova istanza ColorMatrixFilter con i parametri specificati.
Parametrimatrix:Array (default = null ) — Un array di 20 elementi organizzati in una matrice 4 x 5.
|
clone | () | metodo |
override public function clone():BitmapFilter
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 1.0, Flash Player 9 |
Restituisce una copia di questo oggetto filtro.
RestituisceBitmapFilter — Una nuova istanza ColorMatrixFilter con tutte le proprietà dell'originale.
|
buildChild()
quattro volte per caricare e visualizzare quattro istanze dell'immagine. La prima chiamata a buildChild()
accetta null
come argomento, senza applicare alcun filtro alla prima istanza. Ogni chiamata successiva a buildChild()
utilizza come argomento una funzione che applica un filtro matrice colore diverso a ogni istanza successiva dell'immagine.
La funzione buildChild()
crea un nuovo oggetto Loader denominato loader
. Per ogni chiamata a buildChild()
, associate un listener di eventi all'oggetto Loader per l'intercettazione degli eventi complete
, che vengono gestiti dalla funzione passata a buildChild()
.
Le funzioni applyRed()
, applyGreen()
e applyBlue()
utilizzano valori diversi per l'array matrix
per ottenere effetti diversi.
Nota: per ottenere risultati ottimali, utilizzate un'immagine di circa 80 pixel di larghezza. Il nome e la posizione del file di immagine dovranno corrispondere al valore passato alla proprietà url
. Ad esempio, il valore passato a url
nell'esempio fa riferimento a un file di immagine denominato "Image.jpg" presente nella stessa directory del file SWF.
package { import flash.display.DisplayObject; import flash.display.Loader; import flash.display.Sprite; import flash.events.Event; import flash.events.IOErrorEvent; import flash.filters.ColorMatrixFilter; import flash.net.URLRequest; public class ColorMatrixFilterExample extends Sprite { private var size:uint = 140; private var url:String = "Image.jpg"; public function ColorMatrixFilterExample() { buildChild(null); buildChild(applyRed); buildChild(applyGreen); buildChild(applyBlue); } private function buildChild(loadHandler:Function):void { var loader:Loader = new Loader(); loader.x = numChildren * size; loader.y = size; loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); if (loadHandler != null) { loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadHandler); } var request:URLRequest = new URLRequest(url); loader.load(request); addChild(loader); } private function applyRed(event:Event):void { var child:DisplayObject = DisplayObject(event.target.loader); var matrix:Array = new Array(); matrix = matrix.concat([1, 0, 0, 0, 0]); // red matrix = matrix.concat([0, 0, 0, 0, 0]); // green matrix = matrix.concat([0, 0, 0, 0, 0]); // blue matrix = matrix.concat([0, 0, 0, 1, 0]); // alpha applyFilter(child, matrix); } private function applyGreen(event:Event):void { var child:DisplayObject = DisplayObject(event.target.loader); var matrix:Array = new Array(); matrix = matrix.concat([0, 0, 0, 0, 0]); // red matrix = matrix.concat([0, 1, 0, 0, 0]); // green matrix = matrix.concat([0, 0, 0, 0, 0]); // blue matrix = matrix.concat([0, 0, 0, 1, 0]); // alpha applyFilter(child, matrix); } private function applyBlue(event:Event):void { var child:DisplayObject = DisplayObject(event.target.loader); var matrix:Array = new Array(); matrix = matrix.concat([0, 0, 0, 0, 0]); // red matrix = matrix.concat([0, 0, 0, 0, 0]); // green matrix = matrix.concat([0, 0, 1, 0, 0]); // blue matrix = matrix.concat([0, 0, 0, 1, 0]); // alpha applyFilter(child, matrix); } private function applyFilter(child:DisplayObject, matrix:Array):void { var filter:ColorMatrixFilter = new ColorMatrixFilter(matrix); var filters:Array = new Array(); filters.push(filter); child.filters = filters; } private function ioErrorHandler(event:IOErrorEvent):void { trace("Unable to load image: " + url); } } }
Tue Jun 12 2018, 02:44 PM Z