Пакет | flash.filters |
Класс | public class ConvolutionFilter |
Наследование | ConvolutionFilter ![]() ![]() |
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Создать фильтр "Свертывание" можно с помощью синтаксиса new ConvolutionFilter()
. Выбор фильтра зависит от объекта, к которому требуется его применить:
filters
(наследуемое от класса DisplayObject). При задании объекту свойства filters
сам объект не модифицируется, а фильтр можно удалить через свойство filters
. BitmapData.applyFilter()
. При вызове applyFilter()
для объекта BitmapData из исходного объекта BitmapData и объекта фильтра формируется изображение с применением фильтра.При применении фильтра к визуализируемому объекту свойство cacheAsBitmap
этого объекта принимает значение true
. Если удалить все фильтры, будет восстановлено исходное значение cacheAsBitmap
.
Невозможно применить фильтр к изображениям, если их получившаяся длина или ширина превышает 2880 пикселов. Например, при масштабировании большого фрагмента ролика, к которому применен фильтр, фильтр будет снят, если получившееся изображение достигнет предела 2880 пикселов в длину или в ширину.
См. также
Свойство | Определено | ||
---|---|---|---|
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 | ||
![]() | prototype : Object [статические]
Ссылка на модель объекта класса или функции. | Object |
Метод | Определено | ||
---|---|---|---|
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 |
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
поверх прямоугольника
, чья ширина и высота задается по размеру 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). Ниже приведены критерии для ускорения операций свертывания:
Примечание. При создании фильтра свертывания с помощью конструктора без параметров порядок, в котором задаются значения для свойств матрицы, влияет на поведение фильтра. В следующем случае при назначении массива матрицы свойства 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 | свойство |
matrixX:Number
[чтение и запись] Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Размер x матрицы (число столбцов в матрице). Значение по умолчанию 0.
public function get matrixX():Number
public function set matrixX(value:Number):void
matrixY | свойство |
matrixY:Number
[чтение и запись] Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Размер y матрицы (число столбцов в матрице). Значение по умолчанию 0.
public function get matrixY():Number
public function set matrixY(value:Number):void
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); } } }