Пакет | flash.filters |
Класс | public class ConvolutionFilter |
Наследование | ConvolutionFilter BitmapFilter Object |
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Создать фильтр «Свертывание» можно с помощью синтаксиса new ConvolutionFilter()
. Выбор фильтра зависит от объекта, к которому требуется его применить:
- Если фильтр применяется к фрагментам ролика, текстовым полям, кнопкам или видео, следует использовать свойство
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.DisplayObject.filters
flash.display.DisplayObject.cacheAsBitmap
матрица
Свойство | Определено | ||
---|---|---|---|
alpha : Number
Значение альфа-прозрачности цвета замены. | ConvolutionFilter | ||
bias : Number
Степень смещения, добавляемого к результату преобразования матрицы. | ConvolutionFilter | ||
clamp : Boolean
Определяет, зафиксировано ли изображение. | ConvolutionFilter | ||
color : uint
Шестнадцатеричный цвет для замены пикселей, отсутствующих в исходном изображении. | ConvolutionFilter | ||
constructor : Object
Ссылка на объект класса или функцию конструктора для данного экземпляра объекта. | Object | ||
divisor : Number
Делитель, используемый при проведении преобразования матрицы. | ConvolutionFilter | ||
matrix : Array
Массив значений, используемых для матричных преобразований. | ConvolutionFilter | ||
matrixX : Number
Размер x матрицы (число столбцов в матрице). | ConvolutionFilter | ||
matrixY : Number
Измерение y матрицы (число столбцов в матрице). | ConvolutionFilter | ||
preserveAlpha : Boolean
Определяет, сохраняется ли альфа-канал без эффекта фильтра или фильтр свертывания применяется к альфа-каналу так же, как и к цветовым каналам. | ConvolutionFilter |
Метод | Определено | ||
---|---|---|---|
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)
Инициализирует новый экземпляр ConvolutionFilter с заданными параметрами. | ConvolutionFilter | ||
[переопределить]
Возвращает копию данного объекта фильтра. | ConvolutionFilter | ||
Показывает, определено ли заданное свойство для объекта. | Object | ||
Показывает, есть ли экземпляр класса Object в цепи прототипов объекта, заданного в качестве параметра. | Object | ||
Показывает наличие заданного свойства и его перечисляемость. | Object | ||
Задает доступность динамического свойства для операций цикла. | Object | ||
Возвращает строковое представление этого объекта, отформатированного в соответствии со стандартами, принятыми для данной локали. | Object | ||
Возвращает строковое представление заданного объекта. | Object | ||
Возвращает элементарное значение заданного объекта. | Object |
alpha | свойство |
alpha:Number
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Значение альфа-прозрачности цвета замены. Действительны значения от 0 до 1,0. По умолчанию — 0. Например, при 0,25 устанавливается 25-процентная прозрачность.
Реализация
public function get alpha():Number
public function set alpha(value:Number):void
bias | свойство |
bias:Number
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Степень смещения, добавляемого к результату преобразования матрицы. Смещение увеличивает значение цвета в каждом канале, так что темные цвета кажутся светлее. Значением по умолчанию является 0.
Реализация
public function get bias():Number
public function set bias(value:Number):void
clamp | свойство |
clamp:Boolean
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Определяет, зафиксировано ли изображение. Для пикселей, лежащих за пределами исходного изображения, значение true
указывает, что входное изображение растянуто по каждой из границ методом дублирования значений цветов на соответствующем крае входного изображения. Значение false
указывает на то, что следует использовать другой цвет, согласно значениям свойств color
и alpha
. Значение по умолчанию — true
.
Реализация
public function get clamp():Boolean
public function set clamp(value:Boolean):void
Пример ( Использование этого примера )
BitmapData
, из которых один в два раза меньше другого. При первой загрузке примера больший блок рисуется внутри mc
с помощью attachBitmap()
. При щелчке по mc
и вызове метода applyFilter()
экземпляр largeBox
класса BitmapData
снова отрисовывается, а исходным растровым изображением при этом служит smallBox
. Так как метод applyFilter()
рисует smallBox
поверх Rectangle
, ширина и высота которого задается по размеру largeBox
, исходное растровое изображение меньше, чем область отрисовки. Свойство clamp
объекта ConvolutionFilter
в этом случае имеет значение false
, а область, не покрытая исходным растровым изображением, smallBox
, имеет сплошную красную заливку, определяемую переменными clampColor
и 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 | свойство |
color:uint
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Шестнадцатеричный цвет для замены пикселей, отсутствующих в исходном изображении. Это значение в формате RGB без альфа-компонента. По умолчанию — 0.
Реализация
public function get color():uint
public function set color(value:uint):void
divisor | свойство |
divisor:Number
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Делитель, используемый при проведении преобразования матрицы. Значением по умолчанию является 1. Делитель, являющийся суммой всех значений матрицы, смягчает интенсивность цвета получаемого изображения. Значение 0 игнорируется, а вместо него используется значение по умолчанию.
Реализация
public function get divisor():Number
public function set divisor(value:Number):void
matrix | свойство |
matrix:Array
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Массив значений, используемых для матричных преобразований. Число элементов массива должно равняться matrixX * matrixY
.
Свертывание матрицы исходит из размерности матрицы n x m, в которой описано, как значение каждого пикселя входного изображения сочетается со значением соседнего пикселя и какое значение получается в результате. Каждый получаемый пиксель определяется применением матрицы к соответствующему исходному пикселю и соседним с ним пикселям.
При свертывании матрицы 3 x 3 для каждого отдельного цветового канала используется следующая формула:
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
Некоторые фильтры работают быстрее при использовании процессоров с аппаратным ускорением SSE (Streaming SIMD Extensions). Ниже приведены критерии для ускорения операций свертывания:
- Фильтр должен иметь размерность 3x3.
- Все элементы фильтра должны быть целыми в диапазоне от -127 до +127.
- Сумма всех элементов фильтра не должна превышать 127.
- Если один из элементов фильтра отрицательный, делитель должен быть от 2,00001 до 256.
- Если все элементы положительные, делитель должен быть от 1,1 до 256.
- Смещение должно быть представлено целым числом.
Примечание. При создании фильтра свертывания с помощью конструктора без параметров порядок, в котором задаются значения для свойств матрицы, влияет на поведение фильтра. В следующем случае при назначении массива матрицы свойства matrixX
и matrixY
по-прежнему имеют значение 0
(значение по умолчанию):
public var myfilter:ConvolutionFilter = new ConvolutionFilter(); myfilter.matrix = [0, 0, 0, 0, 1, 0, 0, 0, 0]; myfilter.matrixX = 3; myfilter.matrixY = 3;
В следующем случае при назначении массива матрицы свойства matrixX
и matrixY
по-прежнему имеют значение 3
:
public var myfilter:ConvolutionFilter = new ConvolutionFilter(); myfilter.matrixX = 3; myfilter.matrixY = 3; myfilter.matrix = [0, 0, 0, 0, 1, 0, 0, 0, 0];
Реализация
public function get matrix():Array
public function set matrix(value:Array):void
Выдает
TypeError — Массив при назначении принимает значение null.
|
matrixX | свойство |
matrixY | свойство |
preserveAlpha | свойство |
preserveAlpha:Boolean
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Определяет, сохраняется ли альфа-канал без эффекта фильтра или фильтр свертывания применяется к альфа-каналу так же, как и к цветовым каналам. Значение false
указывает, что свертывание применяется ко всем каналам, включая альфа-канал. Значение true
указывает, что свертывание применяется только к цветовым каналам. По умолчанию используется значение true
.
Реализация
public function get preserveAlpha():Boolean
public function set preserveAlpha(value:Boolean):void
ConvolutionFilter | () | Конструктор |
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)
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Инициализирует новый экземпляр ConvolutionFilter с заданными параметрами.
ПараметрыmatrixX:Number (default = 0 ) — Размер x матрицы (число столбцов в матрице). Значением по умолчанию является 0.
| |
matrixY:Number (default = 0 ) — Размер y матрицы (число столбцов в матрице). Значением по умолчанию является 0.
| |
matrix:Array (default = null ) — Массив значений, используемых для матричных преобразований. Число элементов массива должно равняться matrixX * matrixY .
| |
divisor:Number (default = 1.0 ) — Делитель, используемый при проведении преобразования матрицы. Значением по умолчанию является 1. Делитель, являющийся суммой всех значений матрицы, выравнивает интенсивность цвета получаемого изображения. Значение 0 игнорируется, а вместо него используется значение по умолчанию.
| |
bias:Number (default = 0.0 ) — Степень смещения, добавляемого к результату преобразования матрицы. Значением по умолчанию является 0.
| |
preserveAlpha:Boolean (default = true ) — Значение false указывает, что значение альфа-канала не сохранено, а свертывание применяется ко всем каналам, включая альфа-канал. Значение true указывает, что свертывание применяется только к цветовым каналам. По умолчанию используется значение true .
| |
clamp:Boolean (default = true ) — Для пикселей, лежащих за пределами исходного изображения, значение true указывает на то, что входное изображение растянуто по каждой из границ методом дублирования значений цветов на данном крае входного изображения. Значение false указывает на то, что следует использовать другой цвет, согласно значениям свойств color и alpha . Значение по умолчанию — true .
| |
color:uint (default = 0 ) — Шестнадцатеричный цвет для замены пикселей, отсутствующих в исходном изображении.
| |
alpha:Number (default = 0.0 ) — Значение альфа-канала для цвета замены.
|
clone | () | метод |
override public function clone():BitmapFilter
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Возвращает копию данного объекта фильтра.
ВозвращаетBitmapFilter — Новый экземпляр ConvolutionFilter с теми же свойствами, что и оригинальный экземпляр ConvolutionFilter.
|
buildChild()
для загрузки и отображения четырех экземпляров изображения. Каждый вызов buildChild()
использует в качестве аргумента функцию, которая не применяет фильтры к первому экземпляру, но применяет разные фильтры свертывания к каждому последующему экземпляру.
Функция buildChild()
создает новый объект Loader и присваивает ему имя loader
. При каждом вызове buildChild()
нужно назначать объекту Loader прослушиватель событий, который будет регистрировать события complete
, обрабатываемые функцией, которая передается к buildChild()
.
Функции applyBrightness()
, applySharpness()
и applyOutline()
применяют к массиву matrix
разные значения для получения различных эффектов ConvolutionFilter.
Примечание. Для оптимального результата рекомендуется использовать изображения шириной около 80 пикселей. Имя и расположение файла с изображением должны совпадать со значением, которое передается свойству url
. Например, значение, передаваемое свойству url
в данном примере, указывает на файл с именем Image.jpg, который хранится в том же каталоге, что и 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, 11:34 AM Z