Paquete | flash.filters |
Clase | public class ConvolutionFilter |
Herencia | ConvolutionFilter BitmapFilter Object |
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 1.0, Flash Player 9 |
Para crear un filtro de convolución, utilice la sintaxis new ConvolutionFilter()
. El uso de filtros depende del objeto al que se aplique el filtro:
- Para aplicar filtros a clips de película, campos de texto, botones y vídeo, utilice la propiedad
filters
(heredada de DisplayObject). La propiedadfilters
de un objeto no lo modifica y se puede quitar el filtro borrando la propiedadfilters
. - Para aplicar filtros a objetos BitmapData, utilice el método
BitmapData.applyFilter()
. Cuando se llama aapplyFilter()
en un objeto BitmapData, se genera una imagen filtrada al procesar el objeto BitmapData de origen y el objeto de filtro.
Si aplica un filtro a un objeto de visualización, el valor de la propiedad cacheAsBitmap
del objeto se establece en true
. Si borra todos los filtros, se restaurará el valor original de cacheAsBitmap
.
No se aplica ningún filtro si la imagen resultante excede las dimensiones máximas. En AIR 1.5 y en Flash Player 10, la anchura o altura máxima en píxeles es de 8,191, y el número total de píxeles no puede superar los 16,777,215. (De este modo, si una imagen tiene 8,191 píxeles de anchura, sólo podrá tener 2.048 píxeles de altura.) En Flash Player 9 y versiones anteriores y en AIR 1.1 y versiones anteriores, el límite es 2.880 píxeles de alto y 2.880 píxeles de ancho. Por ejemplo, si amplía un clip de película grande al que se le ha aplicado un filtro, éste se desactiva si la imagen resultante supera las dimensiones máximas.
Elementos de API relacionados
flash.display.DisplayObject.filters
flash.display.DisplayObject.cacheAsBitmap
matrix
Propiedad | Definido por | ||
---|---|---|---|
alpha : Number
Valor de transparencia alfa del color opcional. | ConvolutionFilter | ||
bias : Number
Cantidad de sesgo que debe añadirse al resultado de la transformación de matriz. | ConvolutionFilter | ||
clamp : Boolean
Indica si la imagen debe fijarse. | ConvolutionFilter | ||
color : uint
Color hexadecimal para reemplazar los píxeles que quedan fuera de la imagen de origen. | ConvolutionFilter | ||
constructor : Object
Una referencia a la clase de objeto o función constructora para una instancia de objeto determinada. | Object | ||
divisor : Number
Divisor que se utiliza durante la transformación de matriz. | ConvolutionFilter | ||
matrix : Array
Conjunto de valores que se utiliza para la transformación del conjunto. | ConvolutionFilter | ||
matrixX : Number
La dimensión x de la matriz (el número de columnas de la matriz). | ConvolutionFilter | ||
matrixY : Number
La dimensión y de la matriz (el número de filas de la matriz). | ConvolutionFilter | ||
preserveAlpha : Boolean
Indica si el canal alfa se conserva sin el efecto de filtro o si se aplica el filtro de convolución al canal alfa, así como a los canales de color. | ConvolutionFilter |
Método | Definido por | ||
---|---|---|---|
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)
Inicializa una instancia ConvolutionFilter con los parámetros especificados. | ConvolutionFilter | ||
[override]
Devuelve una copia de este objeto de filtro. | ConvolutionFilter | ||
Indica si un objeto tiene definida una propiedad especificada. | Object | ||
Indica si hay una instancia de la clase Object en la cadena de prototipo del objeto especificado como parámetro. | Object | ||
Indica si existe la propiedad especificada y si es enumerable. | Object | ||
Establece la disponibilidad de una propiedad dinámica para operaciones de bucle. | Object | ||
Devuelve la representación de cadena de este objeto, con formato según las convenciones específicas de configuración regional. | Object | ||
Devuelve la representación de cadena del objeto especificado. | Object | ||
Devuelve el valor simple del objeto especificado. | Object |
alpha | propiedad |
alpha:Number
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 1.0, Flash Player 9 |
Valor de transparencia alfa del color opcional. Los valores válidos van de 0 a 1,0. El valor por defecto es 0. Por ejemplo, 0,25 establece un valor de transparencia del 25%.
Implementación
public function get alpha():Number
public function set alpha(value:Number):void
bias | propiedad |
bias:Number
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 1.0, Flash Player 9 |
Cantidad de sesgo que debe añadirse al resultado de la transformación de matriz. El sesgo aumenta el valor de color de cada canal para que los colores oscuros parezcan más claros. El valor predeterminado es 0.
Implementación
public function get bias():Number
public function set bias(value:Number):void
clamp | propiedad |
clamp:Boolean
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 1.0, Flash Player 9 |
Indica si la imagen debe fijarse. Para los píxeles que quedan fuera de la imagen de origen, un valor true
indica que la imagen de entrada se amplía a lo largo de cada uno de sus bordes cuanto sea necesario duplicando los valores de color en cada borde de la imagen de entrada. false
indica que se utilizará otro color, según se haya especificado en las propiedades color
y alpha
. El valor predeterminado es true
.
Implementación
public function get clamp():Boolean
public function set clamp(value:Boolean):void
Ejemplo ( Cómo utilizar este ejemplo )
BitmapData
; el tamaño de uno de ellos es la mitad del otro. Cuando el ejemplo se carga por primera vez, el cuadro más grande se dibuja dentro de mc
utilizando attachBitmap()
. Cuando se hace clic en mc
y se llama al método applyFilter()
, la instancia largeBox
de BitmapData
se vuelve a dibujar con smallBox
como mapa de bits de origen. Como applyFilter()
dibuja un objeto smallBox
en un elemento Rectangle
cuya anchura y altura vienen especificadas como las del objeto largeBox
, el mapa de bits de origen es más pequeño que el área de dibujo. La propiedad clamp
de ConvolutionFilter
en este caso se define como false
y el área que no queda cubierta por el mapa de bits de origen, smallBox
, es de color rojo, tal como se determina en las variables clampColor
y 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 | propiedad |
color:uint
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 1.0, Flash Player 9 |
Color hexadecimal para reemplazar los píxeles que quedan fuera de la imagen de origen. Es un valor RGB sin componente alfa. El valor por defecto es 0.
Implementación
public function get color():uint
public function set color(value:uint):void
divisor | propiedad |
divisor:Number
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 1.0, Flash Player 9 |
Divisor que se utiliza durante la transformación de matriz. El valor predeterminado es 1. Un divisor que es la suma de todos los valores de matriz suaviza la intensidad de color general del resultado. Se ignora un valor de 0 y en su lugar se utiliza el valor predeterminado.
Implementación
public function get divisor():Number
public function set divisor(value:Number):void
matrix | propiedad |
matrix:Array
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 1.0, Flash Player 9 |
Conjunto de valores que se utiliza para la transformación del conjunto. El número de elementos de la matriz debe ser igual a matrixX * matrixY
.
Una convolución de matriz se basa en una matriz n x m, que describe cómo el valor de un píxel determinado en la imagen de entrada se combina con los valores de los píxeles colindantes para producir un valor de píxel resultante. Cada píxel resultante se determina aplicando la matriz al píxel de origen correspondiente y a los píxeles colindantes.
Para una convolución de matriz 3 x 3 se emplea la fórmula siguiente para cada canal de color independiente:
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
Algunas especificaciones de filtro se ejecutan más rápidamente cuando se utiliza un procesador con SSE (Streaming SIMD Extensions). A continuación, se indican criterios para conseguir operaciones de convolución más rápidas:
- El filtro debe ser de 3x3.
- Todos los términos del filtro deben ser enteros entre -127 y +127.
- El valor absoluto de la suma de todos los términos del filtro no debe ser mayor de 127.
- Si alguno de los términos del filtro es negativo, el divisor debe estar entre 2,00001 y 256.
- Si todos los términos del filtro son positivos, el divisor debe estar entre 1,1 y 256.
- El sesgo debe ser un entero.
Nota: si se crea una instancia de ConvolutionFilter utilizando el constructor sin parámetros, el orden en que se asignan los valores a las propiedades de la matriz afecta al comportamiento del filtro. En el siguiente caso, el conjunto se asigna mientras que las propiedades matrixX
y matrixY
siguen definidas en 0
(valor predeterminado):
public var myfilter:ConvolutionFilter = new ConvolutionFilter(); myfilter.matrix = [0, 0, 0, 0, 1, 0, 0, 0, 0]; myfilter.matrixX = 3; myfilter.matrixY = 3;
En el siguiente caso, el conjunto se asigna mientras que las propiedades matrixX
y matrixY
están definidas en 3
:
public var myfilter:ConvolutionFilter = new ConvolutionFilter(); myfilter.matrixX = 3; myfilter.matrixY = 3; myfilter.matrix = [0, 0, 0, 0, 1, 0, 0, 0, 0];
Implementación
public function get matrix():Array
public function set matrix(value:Array):void
Emite
TypeError — El conjunto es null cuando se define
|
matrixX | propiedad |
matrixX:Number
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 1.0, Flash Player 9 |
La dimensión x de la matriz (el número de columnas de la matriz). El valor predeterminado es 0.
Implementación
public function get matrixX():Number
public function set matrixX(value:Number):void
matrixY | propiedad |
matrixY:Number
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 1.0, Flash Player 9 |
La dimensión y de la matriz (el número de filas de la matriz). El valor predeterminado es 0.
Implementación
public function get matrixY():Number
public function set matrixY(value:Number):void
preserveAlpha | propiedad |
preserveAlpha:Boolean
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 1.0, Flash Player 9 |
Indica si el canal alfa se conserva sin el efecto de filtro o si se aplica el filtro de convolución al canal alfa, así como a los canales de color. Un valor false
indica que la convolución se aplica a todos los canales, incluido el canal alfa. true
indica que la convolución sólo se aplica a los canales de color. El valor predeterminado es true
.
Implementación
public function get preserveAlpha():Boolean
public function set preserveAlpha(value:Boolean):void
ConvolutionFilter | () | Información sobre |
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)
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 1.0, Flash Player 9 |
Inicializa una instancia ConvolutionFilter con los parámetros especificados.
ParámetrosmatrixX:Number (default = 0 ) — La dimensión x de la matriz (el número de columnas de la matriz). El valor predeterminado es 0.
| |
matrixY:Number (default = 0 ) — La dimensión y de la matriz (el número de filas de la matriz). El valor predeterminado es 0.
| |
matrix:Array (default = null ) — Conjunto de valores utilizados para la transformación de matrices. El número de elementos de la matriz debe ser igual a matrixX * matrixY .
| |
divisor:Number (default = 1.0 ) — Divisor que se utiliza durante la transformación de matriz. El valor predeterminado es 1. Un divisor que es la suma de todos los valores de matriz compensa la intensidad de color general del resultado. Se ignora un valor de 0 y en su lugar se utiliza el valor predeterminado.
| |
bias:Number (default = 0.0 ) — Sesgo que debe añadirse al resultado de la transformación de matriz. El valor predeterminado es 0.
| |
preserveAlpha:Boolean (default = true ) — Un valor false indica que el valor alfa no se conserva y que la convolución se aplica a todos los canales, incluido el canal alfa. true indica que la convolución sólo se aplica a los canales de color. El valor predeterminado es true .
| |
clamp:Boolean (default = true ) — Para los píxeles que quedan fuera de la imagen de origen, un valor true indica que la imagen de entrada se amplía a lo largo de cada uno de sus bordes cuanto sea necesario duplicando los valores de color en cada borde de la imagen de entrada. false indica que se utilizará otro color, según se haya especificado en las propiedades color y alpha . El valor predeterminado es true .
| |
color:uint (default = 0 ) — Color hexadecimal para reemplazar los píxeles que quedan fuera de la imagen de origen.
| |
alpha:Number (default = 0.0 ) — Alfa del color opcional.
|
clone | () | método |
override public function clone():BitmapFilter
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | AIR 1.0, Flash Player 9 |
Devuelve una copia de este objeto de filtro.
Valor devueltoBitmapFilter — Una nueva instancia ConvolutionFilter con las mismas propiedades que la instancia ConvolutionMatrixFilter original.
|
buildChild()
cuatro veces para cargar y mostrar cuatro instancias de la imagen. Cada llamada a buildChild()
toma como argumento una función que no aplica ningún filtro a la primera instancia y aplica filtros de convolución diferentes a cada una de las sucesivas instancias.
La función buildChild()
crea un nuevo objeto Loader denominado loader
. Para cada llamada a buildChild()
, se asocia un detector de eventos al objeto Loader para detectar eventos complete
que se controlan con la función transferida a buildChild()
.
Las funciones applyBrightness()
, applySharpness()
y applyOutline()
utilizan distintos valores para el conjunto matrix
para conseguir distintos efectos de ConvolutionFilter.
Nota: para obtener los mejores resultados, utilice una imagen de aproximadamente 80 píxeles de anchura. El nombre y la ubicación del archivo de imagen deben coincidir con el valor transferido a la propiedad url
. Por ejemplo, el valor transferido a url
en el ejemplo señala a un archivo de imagen llamado "Image.jpg" que se encuentra en el mismo directorio que el archivo 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:12 PM Z