Главная / Action Script 3
Пакетflash.filters
Классpublic final class ColorMatrixFilter
НаследованиеColorMatrixFilter Inheritance BitmapFilter Inheritance Object

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Класс ColorMatrixFilter позволяет применить матричное преобразование 4 x 5 в цветовой схеме RGBA с альфа-каналом к каждому пикселу входного изображения для получения результата с новым набором значений в схеме RGBA и альфа-канала. Благодаря этому можно изменять насыщенность, оттенок и яркость альфа-канала и применять другие эффекты. Фильтр можно применять к любому визуализируемому объекту (т.е. объекту, наследуемому от класса DisplayObject), например MovieClip, SimpleButton, TextField, Video, а также объектам BitmapData.

Примечание. В значениях цветовой схемы RGBA наиболее значимый байт является значением красного канала, за которым следуют зеленый, голубой и альфа-канал.

Новая цветовая матрица создается с использованием синтаксиса new ColorMatrixFilter(). Выбор фильтра зависит от объекта, к которому требуется его применить:

При применении фильтра к визуализируемому объекту свойство cacheAsBitmap этого объекта принимает значение true. Если удалить все фильтры, будет восстановлено исходное значение cacheAsBitmap.

Фильтр нельзя применить к изображениям, длина или ширина которых превышает 2880 пикселов. Например, при масштабировании большого фрагмента ролика, к которому применен фильтр, фильтр будет снят, если получившееся изображение достигнет предела 2880 пикселов в длину или в ширину.

Посмотреть примеры

См. также

flash.display.BitmapData.getPixel()
flash.display.BitmapData.applyFilter()
flash.display.DisplayObject.filters
flash.display.DisplayObject.cacheAsBitmap


Общедоступные свойства
 СвойствоОпределено
 Inheritedconstructor : Object
Ссылка на объект класса или функцию конструктора для данного экземпляра объекта.
Object
  matrix : Array
Массив из 20 элементов для преобразования цвета 4 x 5.
ColorMatrixFilter
 Inheritedprototype : Object
[статические] Ссылка на модель объекта класса или функции.
Object
Общедоступные методы
 МетодОпределено
  
ColorMatrixFilter(matrix:Array = null)
Инициализирует новый экземпляр ColorMatrixFilter с заданными параметрами.
ColorMatrixFilter
  
Возвращает копию данного объекта фильтра.
ColorMatrixFilter
 Inherited
Показывает, определено ли заданное свойство для объекта.
Object
 Inherited
Показывает, есть ли экземпляр класса Object в цепи прототипов объекта, заданного в качестве параметра.
Object
 Inherited
Показывает наличие заданного свойства и его перечисляемость.
Object
 Inherited
Задает доступность динамического свойства для операций цикла.
Object
 Inherited
Возвращает строковое представление заданного объекта.
Object
 Inherited
Возвращает элементарное значение заданного объекта.
Object
Сведения о свойстве
matrixсвойство
matrix:Array  [чтение и запись]

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Массив из 20 элементов для преобразования цвета 4 x 5. Свойство matrix нельзя изменить, непосредственно изменив его значение (например, myFilter.matrix[2] = 1;). Вместо этого нужно внести изменения в ссылку на массив и сбросить значение.

Фильтр цветовой матрицы выделяет в каждом пикселе исходного изображения красный, зеленый, голубой и альфа-компонент, которые соответственно обозначаются srcR, srcG, srcB и srcA. Для вычисления результата по каждому из четырех каналов значение каждого пиксела изображения умножается на значение из матрицы преобразования. К каждому результату при необходимости можно добавить смещение от -255 до 255 (пятый элемент в каждом ряду матрицы). Фильтр собирает все цветовые компоненты в единый пиксел и записывает результат. В следующей формуле элементы от a[0] до a[19] соответствуют записям от 0 до 19 в массиве из 20 элементов, который передается свойству 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]
 

Единица в значении каждого из цветов означает, что 100% указанного канала передается на выход, при этом значение цветового канала сохраняется.

Вычисления производятся над значениями цветов до умножения. Если графика на входе состоит из перемноженных значений цветов, эти значения для данной операции автоматически переводятся в неперемноженные.

Доступны два режима оптимизации:

Только альфа-канал. При передаче фильтру матрицы, которая корректирует только альфа-компонент, как показано в примере, фильтр оптимизирует изображение:

     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)
 

Ускоренный вариант. Доступен только на процессорах с аппаратным ускорением SSE/AltiVec, например Intel® Pentium 3 и выше или Apple® G4 и выше. Ускорение используется, когда множители лежат в диапазоне от -15,99 до 15,99, а слагаемые a[4], a[9], a[14] и a[19] — в диапазоне от -8000 до 8000.



Реализация
    public function get matrix():Array
    public function set matrix(value:Array):void

Выдает
TypeError — Массив при назначении принимает значение null.
Сведения о конструкторе
ColorMatrixFilter()Конструктор
public function ColorMatrixFilter(matrix:Array = null)

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Инициализирует новый экземпляр ColorMatrixFilter с заданными параметрами.

Параметры
matrix:Array (default = null) — Массив из 20 элементов, формирующий матрицу размером 4 х 5.
Сведения о методе
clone()метод
override public function clone():BitmapFilter

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Возвращает копию данного объекта фильтра.

Возвращает
BitmapFilter — Новый экземпляр ColorMatrixFilter с теми же свойствами, что и оригинал.
Примеры Как пользоваться примерами
ColorMatrixFilterExample.as

В следующем примере показано, как различные фильтры цветовой матрицы применяются к файлу изображения. Конструктор фильтров четыре раза вызывает buildChild() для загрузки и отображения четырех экземпляров изображения. При первом вызове buildChild() аргумент принимается за null, и к первому экземпляру фильтр не применяется. При каждом последующем вызове buildChild() аргумент принимает значение функции, применяющей разные фильтры цветовых матриц к каждому последующему экземпляру изображения.

Функция buildChild() создает новый объект Loader и присваивает ему имя loader. При каждом вызове buildChild() нужно назначать объекту Loader приемник событий, который будет регистрировать события complete, обрабатываемые функцией, которая передается к buildChild().

Функции applyRed(), applyGreen() и applyBlue() применяют к массиву matrix разные значения для получения различных эффектов.

Примечание. Для оптимального результата рекомендуется использовать изображения шириной около 80 пикселов. Имя и расположение файла с изображением должны совпадать со значением, которое передается свойству url. Например, значение, передаваемое свойству url в данном примере, указывает на файл с именем "Image.jpg", который хранится в том же каталоге, что и 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);
        }
    }
}