Пакет | flash.filters |
Класс | public final class ColorMatrixFilter |
Наследование | ColorMatrixFilter ![]() ![]() |
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Примечание. В значениях цветовой схемы RGBA наиболее значимый байт является значением красного канала, за которым следуют зеленый, голубой и альфа-канал.
Новая цветовая матрица создается с использованием синтаксиса new ColorMatrixFilter()
. Выбор фильтра зависит от объекта, к которому требуется его применить:
filters
(наследуемое от класса DisplayObject). При задании объекту свойства filters
сам объект не модифицируется, а фильтр можно удалить через свойство filters
. BitmapData.applyFilter()
. При вызове applyFilter()
для объекта BitmapData из исходного объекта BitmapData и объекта фильтра формируется изображение с применением фильтра.При применении фильтра к визуализируемому объекту свойство cacheAsBitmap
этого объекта принимает значение true
. Если удалить все фильтры, будет восстановлено исходное значение cacheAsBitmap
.
Фильтр нельзя применить к изображениям, длина или ширина которых превышает 2880 пикселов. Например, при масштабировании большого фрагмента ролика, к которому применен фильтр, фильтр будет снят, если получившееся изображение достигнет предела 2880 пикселов в длину или в ширину.
См. также
Свойство | Определено | ||
---|---|---|---|
![]() | constructor : Object
Ссылка на объект класса или функцию конструктора для данного экземпляра объекта. | Object | |
matrix : Array
Массив из 20 элементов для преобразования цвета 4 x 5. | ColorMatrixFilter | ||
![]() | prototype : Object [статические]
Ссылка на модель объекта класса или функции. | Object |
Метод | Определено | ||
---|---|---|---|
ColorMatrixFilter(matrix:Array = null)
Инициализирует новый экземпляр ColorMatrixFilter с заданными параметрами. | ColorMatrixFilter | ||
Возвращает копию данного объекта фильтра. | ColorMatrixFilter | ||
![]() |
Показывает, определено ли заданное свойство для объекта. | Object | |
![]() |
Показывает, есть ли экземпляр класса Object в цепи прототипов объекта, заданного в качестве параметра. | Object | |
![]() |
Показывает наличие заданного свойства и его перечисляемость. | Object | |
![]() |
Задает доступность динамического свойства для операций цикла. | Object | |
![]() |
Возвращает строковое представление заданного объекта. | Object | |
![]() |
Возвращает элементарное значение заданного объекта. | Object |
matrix | свойство |
matrix:Array
[чтение и запись] Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 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 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Инициализирует новый экземпляр ColorMatrixFilter с заданными параметрами.
Параметрыmatrix:Array (default = null ) — Массив из 20 элементов, формирующий матрицу размером 4 х 5.
|
clone | () | метод |
override public function clone():BitmapFilter
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Возвращает копию данного объекта фильтра.
ВозвращаетBitmapFilter — Новый экземпляр ColorMatrixFilter с теми же свойствами, что и оригинал.
|
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); } } }