Пакет | flash.filters |
Класс | public final class ColorMatrixFilter |
Наследование | ColorMatrixFilter BitmapFilter Object |
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Примечание. В значениях цветовой схемы RGBA наиболее значимый байт является значением красного канала, за которым следуют зеленый, голубой и альфа-канал.
Новая цветовая матрица создается с использованием синтаксиса new ColorMatrixFilter()
. Выбор фильтра зависит от объекта, к которому требуется его применить:
- Если фильтр применяется к фрагментам ролика, текстовым полям, кнопкам или видео, следует использовать свойство
filters
(наследуемое от класса DisplayObject). При задании объекту свойстваfilters
сам объект не изменяется, а фильтр можно удалить через свойствоfilters
. - Для применения фильтров к объектам BitmapData следует пользоваться методом
BitmapData.applyFilter()
. При вызовеapplyFilter()
для объекта BitmapData из исходного объекта BitmapData и объекта фильтра формируется изображение с применением фильтра.
При применении фильтра к визуализируемому объекту свойство cacheAsBitmap
этого объекта принимает значение true
. Если удалить все фильтры, будет восстановлено исходное значение cacheAsBitmap
.
Фильтр не применяется, если полученное изображение превышает максимальные размеры. В AIR 1.5 и Flash Player 10 максимальный размер изображения составляет 8 191 пикселей в ширину или высоту, а общее количество пикселей не может превышать 16 777 215. (Т. е. если ширина изображения составляет 8 191 пикселя, его высота не может быть больше 2 048 пикселей.) В проигрывателе Flash Player 9 и более ранних версий, а также в AIR 1.1 и более ранних версий, это ограничение составляет 2 880 пикселей в высоту и 2 880 пикселей в ширину. Например, при масштабировании большого фрагмента ролика, к которому применен фильтр, фильтр будет снят, если получившееся изображение достигнет максимальных размеров.
Связанные элементы API
flash.display.BitmapData.applyFilter()
flash.display.DisplayObject.filters
flash.display.DisplayObject.cacheAsBitmap
Свойство | Определено | ||
---|---|---|---|
constructor : Object
Ссылка на объект класса или функцию конструктора для данного экземпляра объекта. | Object | ||
matrix : Array
Массив из 20 элементов для преобразования цвета 4 x 5. | ColorMatrixFilter |
Метод | Определено | ||
---|---|---|---|
ColorMatrixFilter(matrix:Array = null)
Инициализирует новый экземпляр ColorMatrixFilter с заданными параметрами. | ColorMatrixFilter | ||
[переопределить]
Возвращает копию данного объекта фильтра. | ColorMatrixFilter | ||
Показывает, определено ли заданное свойство для объекта. | Object | ||
Показывает, есть ли экземпляр класса 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 x 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); } } }
Tue Jun 12 2018, 11:34 AM Z