Package | flash.filters |
Classe | public final class ColorMatrixFilter |
Héritage | ColorMatrixFilter BitmapFilter Object |
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | AIR 1.0, Flash Player 9 |
Remarque : pour les valeurs RVBA, l’octet le plus significatif représente la valeur du canal rouge, suivie de vert, bleu et alpha.
Pour créer un filtre matrice de couleurs, utilisez la syntaxe new ColorMatrixFilter()
. L’utilisation de filtres dépend de l’objet auquel vous appliquez le filtre.
- Pour appliquer des filtres aux clips, champs de texte, boutons et vidéo, utilisez la propriété
filters
(héritée de DisplayObject). Lorsque vous définissez la propriétéfilters
d’un objet, celui-ci n’est pas modifié. En outre, vous pouvez supprimer la propriétéfilters
pour enlever le filtre. - Pour appliquer des filtres aux objets BitmapData, utilisez la méthode
BitmapData.applyFilter()
. L’appel deapplyFilter()
pour un objet BitmapData génère une image filtrée à partir de l’objet BitmapData source et de l’objet filtre.
Si vous appliquez un filtre à un objet d’affichage, la propriété cacheAsBitmap
de cet objet est réglée sur true
. Si vous supprimez tous les filtres, la valeur d’origine de cacheAsBitmap
est restaurée.
Aucun filtre n’est appliqué si l’image obtenue dépasse les dimensions maximales. Dans AIR 1.5 et Flash Player 10, la taille maximale est de 8 191 pixels en largeur ou en hauteur, et le nombre total de pixels ne peut pas excéder 16 777 215 pixels (ainsi, si la largeur d’une image est de 8 191 pixels, sa hauteur maximale doit être de 2 048 pixels). Dans Flash Player 9 et les versions antérieures, ainsi que dans AIR 1.1 et les versions antérieures, la limite est de 2 880 pixels de haut sur 2 880 pixels de large. Par exemple, lorsque vous effectuez un zoom avant sur un clip de grande taille auquel un filtre est appliqué, le filtre sera désactivé si l’image obtenue atteint les dimensions maximales.
Eléments de l’API associés
flash.display.BitmapData.applyFilter()
flash.display.DisplayObject.filters
flash.display.DisplayObject.cacheAsBitmap
Propriété | Défini par | ||
---|---|---|---|
constructor : Object
Référence à l’objet de classe ou à la fonction constructeur d’une occurrence donnée d’un objet. | Object | ||
matrix : Array
Tableau de 20 éléments pour la transformation de couleurs 4 x 5. | ColorMatrixFilter |
Méthode | Défini par | ||
---|---|---|---|
ColorMatrixFilter(matrix:Array = null)
Initialise une nouvelle occurrence de ColorMatrixFilter avec les paramètres spécifiés. | ColorMatrixFilter | ||
[override]
Renvoie une copie de cet objet filtre. | ColorMatrixFilter | ||
Indique si la propriété spécifiée d’un objet est définie. | Object | ||
Indique si une occurrence de la classe Object figure dans la chaîne de prototype de l’objet spécifié en tant que paramètre. | Object | ||
Indique si la propriété spécifiée existe et est énumérable. | Object | ||
Définit la disponibilité d’une propriété dynamique pour les opérations en boucle. | Object | ||
Renvoie la représentation de chaîne de cet objet, formatée selon les paramètres régionaux en vigueur. | Object | ||
Renvoie la représentation sous forme de chaîne de l’objet spécifié. | Object | ||
Renvoie la valeur primitive de l’objet spécifié. | Object |
matrix | propriété |
matrix:Array
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | AIR 1.0, Flash Player 9 |
Tableau de 20 éléments pour la transformation de couleurs 4 x 5. Il est impossible de changer la propriété matrix
directement en modifiant sa valeur (par exemple, myFilter.matrix[2] = 1;
). A la place, extrayez une référence au tableau, effectuez la modification de la référence et restaurez la valeur.
Le filtre matrice de couleurs sépare chaque pixel d’origine en composants rouge, vert, bleu et alpha comme suit : srcR, srcG, srcB, srcA. Pour calculer le résultat des quatre canaux, la valeur de chaque pixel de l’image est multipliée par les valeurs de la matrice de transformation. Un décalage, compris entre -255 et 255, peut éventuellement être ajouté à chaque résultat (le cinquième élément de chaque ligne de la matrice). Le filtre associe les composants de couleur pour former un pixel unique et renvoie le résultat. Dans la formule suivante, les éléments a[0] à a[19] correspondent aux entrées 0 à 19 du tableau de 20 éléments qui est transmis à la propriété 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]
Pour chaque valeur de couleur du tableau, la valeur 1 signifie que 100 % de ce canal est envoyé en sortie, préservant la valeur du canal de couleur.
Les calculs sont effectués sur des valeurs de couleur non multipliées. Si le graphique d’entrée est constitué de valeurs de couleur prémultipliées, celles-ci sont automatiquement converties en valeurs de couleur non multipliées en vue de cette opération.
Deux modes optimisés sont disponibles :
Alpha uniquement. Quand vous transmettez au filtre une matrice qui ajuste uniquement le composant alpha, comme indiqué ici, le filtre optimise ses performances :
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)
Version plus rapide. Disponible uniquement sur les processeurs dotés d’un accélérateur SSE/Altivec (tels qu’Intel® Pentium® 3 et version ultérieure, Apple® G4 et version ultérieure). L’accélérateur est utilisé quand les termes de multiplicateur sont compris entre -15,99 et 15,99, et les termes d’additionneur a[4], a[9], a[14] et a[19] sont compris entre -8 000 et 8 000.
Implémentation
public function get matrix():Array
public function set matrix(value:Array):void
Valeur émise
TypeError — La valeur du tableau est null au moment de sa définition.
|
ColorMatrixFilter | () | Constructeur |
public function ColorMatrixFilter(matrix:Array = null)
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | AIR 1.0, Flash Player 9 |
Initialise une nouvelle occurrence de ColorMatrixFilter avec les paramètres spécifiés.
Paramètresmatrix:Array (default = null ) — Tableau de 20 éléments organisés en matrice de 4 x 5.
|
clone | () | méthode |
override public function clone():BitmapFilter
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | AIR 1.0, Flash Player 9 |
Renvoie une copie de cet objet filtre.
Valeur renvoyéeBitmapFilter — Nouvelle occurrence de ColorMatrixFilter dont les propriétés sont toutes identiques à celles de l’occurrence d’origine.
|
buildChild()
pour charger et afficher quatre occurrences de l’image. Le premier appel à buildChild()
prend null
comme argument, en n’appliquant aucun filtre à la première occurrence. Chaque appel ultérieur à buildChild()
prend comme argument une fonction qui applique un filtre matrice de couleurs différent à chaque occurrence ultérieure de l’image.
La fonction buildChild()
crée un nouvel objet Loader appelé loader
. Pour chaque appel à buildChild()
, joignez un écouteur d’événements à l’objet Loader pour écouter les événements complete
qui sont gérés par la fonction transmise à buildChild()
.
Les fonctions applyRed()
, applyGreen()
et applyBlue()
utilisent différentes valeurs pour le tableau matrix
afin d’obtenir différents effets.
Remarque : pour de meilleurs résultats, utilisez une image d’une largeur de 80 pixels environ. Le nom et l’emplacement du fichier image doivent correspondre à la valeur que vous transmettez à la propriété url
. En l’occurrence, dans l’exemple, la valeur transmise à url
pointe vers un fichier image nommé « Image.jpg » qui est situé dans le même répertoire que votre fichier 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, 09:30 AM Z