Pacchetto | flash.filters |
Classe | public class ConvolutionFilter |
Ereditarietà | ConvolutionFilter BitmapFilter Object |
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 1.0, Flash Player 9 |
Per creare un nuovo filtro di convoluzione, utilizzate la sintassi new ConvolutionFilter()
. 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, il valore della proprietà cacheAsBitmap
dell'oggetto viene impostato su true
. Se cancellate tutti i filtri, viene ripristinato il valore originario 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. Ad esempio, se ingrandite un clip filmato di grandi dimensioni quando il filtro è applicato, il filtro viene disattivato se l'immagine risultante supera le dimensioni massime.
Elementi API correlati
flash.display.DisplayObject.filters
flash.display.DisplayObject.cacheAsBitmap
matrix
Proprietà | Definito da | ||
---|---|---|---|
alpha : Number
Il valore di trasparenza alfa del colore di sostituzione. | ConvolutionFilter | ||
bias : Number
La variazione da aggiungere al risultato della trasformazione di matrice. | ConvolutionFilter | ||
clamp : Boolean
Indica se l'immagine deve essere fissata. | ConvolutionFilter | ||
color : uint
Il colore esadecimale da sostituire ai pixel esterni all'immagine di origine. | ConvolutionFilter | ||
constructor : Object
Un riferimento all'oggetto classe o alla funzione di costruzione per una determinata istanza di oggetto. | Object | ||
divisor : Number
Il divisore utilizzato durante la trasformazione di matrice. | ConvolutionFilter | ||
matrix : Array
Un array di valori utilizzato per la trasformazione di matrice. | ConvolutionFilter | ||
matrixX : Number
La dimensione x della matrice (il numero di colonne della matrice). | ConvolutionFilter | ||
matrixY : Number
La dimensione y della matrice (il numero di righe della matrice). | ConvolutionFilter | ||
preserveAlpha : Boolean
Indica se il canale alfa viene conservato senza l'effetto filtro o se il filtro di convoluzione viene applicato sia al canale alfa, sia ai canali di colore. | ConvolutionFilter |
Metodo | Definito da | ||
---|---|---|---|
ConvolutionFilter(matrixX:Number = 0, matrixY:Number = 0, matrix:Array = null, divisor:Number = 1.0, bias:Number = 0.0, preserveAlpha:Boolean = true, clamp:Boolean = true, color:uint = 0, alpha:Number = 0.0)
Inizializza un'istanza ConvolutionFilter con i parametri specificati. | ConvolutionFilter | ||
[override]
Restituisce una copia di questo oggetto filtro. | ConvolutionFilter | ||
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 |
alpha | proprietà |
alpha:Number
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 1.0, Flash Player 9 |
Il valore di trasparenza alfa del colore di sostituzione. I valori validi sono compresi tra 0 e 1.0. Il valore predefinito è 0. Ad esempio, 0.25 imposta un valore di trasparenza del 25%.
Implementazione
public function get alpha():Number
public function set alpha(value:Number):void
bias | proprietà |
bias:Number
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 1.0, Flash Player 9 |
La variazione da aggiungere al risultato della trasformazione di matrice. La variazione aumenta il valore del colore di ogni canale, rendendo più vividi i colori scuri. Il valore predefinito è 0.
Implementazione
public function get bias():Number
public function set bias(value:Number):void
clamp | proprietà |
clamp:Boolean
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 1.0, Flash Player 9 |
Indica se l'immagine deve essere fissata. Per i pixel esterni all'immagine di origine, il valore true
indica che l'immagine di input viene estesa lungo ciascuno dei suoi bordi per quanto necessario duplicando i valori di colore ai rispettivi bordi dell'immagine di input. Un valore false
indica che deve essere utilizzato un altro colore, come specificato nelle proprietà color
e alpha
. Il valore predefinito è true
.
Implementazione
public function get clamp():Boolean
public function set clamp(value:Boolean):void
Esempio ( Come utilizzare questo esempio )
BitmapData
per creare due caselle, una delle quali è grande la metà dell'altra. Quando viene caricato il primo esempio, la casella più grande viene disegnata all'interno di mc
utlizzando attachBitmap()
. Quando si fa clic su mc
e si chiama il metodo applyFilter()
, l'istanza largeBox
di BitmapData
viene ridisegnata con smallBox
come bitmap di origine. Poiché applyFilter()
disegna smallBox
sopra un oggetto Rectangle
con larghezza e altezza specificate come uguali a quelle di largeBox
, la bitmap di origine è più grande dell'area di disegno. La proprietà clamp
di ConvolutionFilter
in questo caso è impostata su false
e l'area non coperta dalla bitmap di origine, smallBox
, è colorata di rosso uniforme per effetto delle variabili clampColor
e clampAlpha
.
package { import flash.display.Sprite; import flash.display.BitmapData; import flash.filters.ConvolutionFilter; import flash.text.TextField; import flash.geom.Rectangle; import flash.geom.Point; public class ConvolutionClampExample extends Sprite { // Variables that affect clamping: var clamp:Boolean = false; var clampColor:Number = 0xFF0000; var clampAlpha:Number = 1; // For illustration, keep other ConvolutionFilter variables neutral: var bias:Number = 0; var preserveAlpha:Boolean = false; // Also, construct a neutral matrix var matrixCols:Number = 3; var matrixRows:Number = 3; var matrix:Array = [ 1,1,1, 1,1,1, 1,1,1 ]; var filter:ConvolutionFilter = new ConvolutionFilter(matrixCols, matrixRows, matrix, matrix.length, bias, preserveAlpha, clamp, clampColor, clampAlpha); var largeBoxWidth:Number = 100; var largeBoxHeight:Number = 100; var largeBox:BitmapData = new BitmapData(largeBoxWidth, largeBoxWidth, true, 0xCC00FF00); var smallBoxWidth:Number = largeBoxWidth / 2; var smallBoxHeight:Number = largeBoxHeight / 2; var smallBox:BitmapData = new BitmapData(smallBoxWidth, smallBoxWidth, true, 0xCC0000FF); var mc:MovieClip = this.createEmptyMovieClip("mc", this.getNextHighestDepth()); mc.attachBitmap(largeBox, this.getNextHighestDepth()); mc.onPress = function() { largeBox.applyFilter(smallBox, new Rectangle(0,0, largeBoxWidth, largeBoxHeight), new Point(0,0), filter); } } }
color | proprietà |
color:uint
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 1.0, Flash Player 9 |
Il colore esadecimale da sostituire ai pixel esterni all'immagine di origine. Si tratta di un valore RGB privo di componente alfa. Il valore predefinito è 0.
Implementazione
public function get color():uint
public function set color(value:uint):void
divisor | proprietà |
divisor:Number
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 1.0, Flash Player 9 |
Il divisore utilizzato durante la trasformazione di matrice. Il valore predefinito è 1. Un divisore corrispondente alla somma di tutti i valori della matrice uniforma l'intensità di colore complessiva del risultato. Un valore pari a 0 viene ignorato e viene sostituito con il valore predefinito.
Implementazione
public function get divisor():Number
public function set divisor(value:Number):void
matrix | proprietà |
matrix:Array
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 1.0, Flash Player 9 |
Un array di valori utilizzato per la trasformazione di matrice. Il numero di elementi nell'array deve equivalere a matrixX * matrixY
.
La convoluzione matrice si basa su una matrice n per m, che descrive il modo in cui un determinato valore di pixel nell'immagine di input viene combinato con i valori di pixel adiacenti per generare un valore di pixel risultante. Ogni pixel risultante viene determinato dall'applicazione della matrice al pixel di origine corrispondente e ai pixel a esso adiacenti.
Per una convoluzione matrice 3 x 3 viene utilizzata la formula seguente per ogni singolo canale di colore:
dst (x, y) = ((src (x-1, y-1) * a0 + src(x, y-1) * a1....
src(x, y+1) * a7 + src (x+1,y+1) * a8) / divisor) + bias
Quando vengono eseguite da un processore con SSE (Streaming SIMD Extensions), alcune specifiche di filtro agiscono più velocemente. Di seguito sono indicati i criteri per accelerare le operazioni di convoluzione:
- Il filtro deve essere di tipo 3x3.
- Tutti i termini del filtro devono essere numeri interi compresi tra -127 e +127.
- La somma di tutti i termini del filtro non deve avere un valore assoluto maggiore di 127.
- Se qualche termine è negativo, il divisore deve essere compreso tra 2,00001 e 256.
- Se tutti i termini sono positivi, il divisore deve essere compreso tra 1,1 e 256.
- La variazione (o bias) deve essere un numero intero.
Nota: se create un'istanza ConvolutionFilter mediante una funzione di costruzione senza parametri, l'ordine in cui assegnate i valori alle proprietà matrix influisce sul comportamento del filtro. Nell'esempio seguente, l'array matrix è assegnato mentre le proprietà matrixX
e matrixY
sono impostate su 0
(valore predefinito):
public var myfilter:ConvolutionFilter = new ConvolutionFilter(); myfilter.matrix = [0, 0, 0, 0, 1, 0, 0, 0, 0]; myfilter.matrixX = 3; myfilter.matrixY = 3;
Nell'esempio seguente, l'array matrix è assegnato mentre le proprietà matrixX
e matrixY
sono impostate su 3
:
public var myfilter:ConvolutionFilter = new ConvolutionFilter(); myfilter.matrixX = 3; myfilter.matrixY = 3; myfilter.matrix = [0, 0, 0, 0, 1, 0, 0, 0, 0];
Implementazione
public function get matrix():Array
public function set matrix(value:Array):void
Genera
TypeError — Quando viene impostato, l'array è null.
|
matrixX | proprietà |
matrixY | proprietà |
preserveAlpha | proprietà |
preserveAlpha:Boolean
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 1.0, Flash Player 9 |
Indica se il canale alfa viene conservato senza l'effetto filtro o se il filtro di convoluzione viene applicato sia al canale alfa, sia ai canali di colore. Il valore false
indica che la convoluzione viene applicata a tutti i canali, compreso il canale alfa. Il valore true
indica che la convoluzione si applica solo ai canali di colore. Il valore predefinito è true
.
Implementazione
public function get preserveAlpha():Boolean
public function set preserveAlpha(value:Boolean):void
ConvolutionFilter | () | Funzione di costruzione |
public function ConvolutionFilter(matrixX:Number = 0, matrixY:Number = 0, matrix:Array = null, divisor:Number = 1.0, bias:Number = 0.0, preserveAlpha:Boolean = true, clamp:Boolean = true, color:uint = 0, alpha:Number = 0.0)
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | AIR 1.0, Flash Player 9 |
Inizializza un'istanza ConvolutionFilter con i parametri specificati.
ParametrimatrixX:Number (default = 0 ) — La dimensione x della matrice (il numero di colonne della matrice). Il valore predefinito è 0.
| |
matrixY:Number (default = 0 ) — La dimensione y della matrice (il numero di righe della matrice). Il valore predefinito è 0.
| |
matrix:Array (default = null ) — L'array di valori utilizzato per la trasformazione di matrice. Il numero di elementi nell'array deve equivalere a matrixX * matrixY .
| |
divisor:Number (default = 1.0 ) — Il divisore utilizzato durante la trasformazione di matrice. Il valore predefinito è 1. Un divisore corrispondente alla somma di tutti i valori della matrice uniforma l'intensità di colore complessiva del risultato. Un valore pari a 0 viene ignorato e viene sostituito con il valore predefinito.
| |
bias:Number (default = 0.0 ) — La variazione da aggiungere al risultato della trasformazione di matrice. Il valore predefinito è 0.
| |
preserveAlpha:Boolean (default = true ) — Il valore false indica che il valore alfa non viene conservato e che la convoluzione viene applicata a tutti i canali, compreso il canale alfa. Il valore true indica che la convoluzione si applica solo ai canali di colore. Il valore predefinito è true .
| |
clamp:Boolean (default = true ) — Per i pixel esterni all'immagine di origine, il valore true indica che l'immagine di input viene estesa se necessario lungo ciascuno dei suoi bordi, duplicando i valori di colore corrispondenti a un bordo specifico dell'immagine di input. Un valore false indica che deve essere utilizzato un altro colore, come specificato nelle proprietà color e alpha . Il valore predefinito è true .
| |
color:uint (default = 0 ) — Il colore esadecimale da sostituire ai pixel esterni all'immagine di origine.
| |
alpha:Number (default = 0.0 ) — Il canale alfa del colore di sostituzione.
|
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 — BitmapFilter Una nuova istanza ConvolutionFilter con tutte le proprietà dell'istanza originale di ConvolutionMatrixFilter.
|
buildChild()
quattro volte per caricare e visualizzare quattro istanze dell'immagine. Oghi chiamata a buildChild()
utilizza come argomento una funzione che non applica alcun filtro alla prima istanza e un filtro di convoluzione diverso a ogni istanza successiva.
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 applyBrightness()
, applySharpness()
e applyOutline()
utilizzano valori diversi per l'array matrix
per ottenere effetti diversi dall'applicazione del filtro ConvolutionFilter.
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.*; import flash.filters.BitmapFilter; import flash.filters.ConvolutionFilter; import flash.net.URLRequest; import flash.text.TextField; import flash.text.TextFieldAutoSize; public class ConvolutionFilterExample extends Sprite { private var size:uint = 140; private var url:String = "Image.jpg"; public function ConvolutionFilterExample() { buildChild(applyNothing); buildChild(applyBrightness); buildChild(applySharpness); buildChild(applyOutline); } 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 applyNothing(event:Event):void { var child:DisplayObject = DisplayObject(event.target.loader); applyLabel(child, "no filter"); } private function applyBrightness(event:Event):void { var child:DisplayObject = DisplayObject(event.target.loader); var matrix:Array = [5, 5, 5, 5, 0, 5, 5, 5, 5]; applyFilter(child, matrix); applyLabel(child, "brightness"); } private function applySharpness(event:Event):void { var child:DisplayObject = DisplayObject(event.target.loader); var matrix:Array = [0, -1, 0, -1, 20, -1, 0, -1, 0]; applyFilter(child, matrix); applyLabel(child, "sharpness"); } private function applyOutline(event:Event):void { var child:DisplayObject = DisplayObject(event.target.loader); var matrix:Array = [-30, 30, 0, -30, 30, 0, -30, 30, 0]; applyFilter(child, matrix); applyLabel(child, "outline"); } private function applyFilter(child:DisplayObject, matrix:Array):void { var matrixX:Number = 3; var matrixY:Number = 3; var divisor:Number = 9; var filter:BitmapFilter = new ConvolutionFilter(matrixX, matrixY, matrix, divisor); var filters:Array = new Array(); filters.push(filter); child.filters = filters; } private function applyLabel(child:DisplayObject, label:String):void { var tf:TextField = new TextField(); tf.x = child.x; tf.y = child.height; tf.autoSize = TextFieldAutoSize.LEFT; tf.text = label; addChild(tf); } private function ioErrorHandler(event:IOErrorEvent):void { trace("Unable to load image: " + url); } } }
Tue Jun 12 2018, 02:44 PM Z