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

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

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

Создать фильтр "Свертывание" можно с помощью синтаксиса new ConvolutionFilter(). Выбор фильтра зависит от объекта, к которому требуется его применить:

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

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

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

См. также

flash.display.BitmapData.applyFilter()
flash.display.DisplayObject.filters
flash.display.DisplayObject.cacheAsBitmap
матрица


Общедоступные свойства
 СвойствоОпределено
  alpha : Number
Значение альфа-прозрачности цвета замены.
ConvolutionFilter
  bias : Number
Степень смещения, добавляемого к результату преобразования матрицы.
ConvolutionFilter
  clamp : Boolean
Определяет, зафиксировано ли изображение.
ConvolutionFilter
  color : uint
Шестнадцатеричный цвет для замены пикселов, отсутствующих в исходном изображении.
ConvolutionFilter
 Inheritedconstructor : Object
Ссылка на объект класса или функцию конструктора для данного экземпляра объекта.
Object
  divisor : Number
Делитель, используемый при проведении преобразования матрицы.
ConvolutionFilter
  matrix : Array
Массив значений, используемых для матричных преобразований.
ConvolutionFilter
  matrixX : Number
Размер x матрицы (число столбцов в матрице).
ConvolutionFilter
  matrixY : Number
Размер y матрицы (число строк в матрице).
ConvolutionFilter
  preserveAlpha : Boolean
Определяет, сохраняется ли альфа-канал без эффекта фильтра, или фильтр свертывания применяется к альфа-каналу так же, как и к цветовым каналам.
ConvolutionFilter
 Inheritedprototype : 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
 Inherited
Показывает, определено ли заданное свойство для объекта.
Object
 Inherited
Показывает, есть ли экземпляр класса Object в цепи прототипов объекта, заданного в качестве параметра.
Object
 Inherited
Показывает наличие заданного свойства и его перечисляемость.
Object
 Inherited
Задает доступность динамического свойства для операций цикла.
Object
 Inherited
Возвращает строковое представление заданного объекта.
Object
 Inherited
Возвращает элементарное значение заданного объекта.
Object
Сведения о свойстве
alphaсвойство
alpha:Number  [чтение и запись]

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 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
Версии среды выполнения:  1.0 9

Степень смещения, добавляемого к результату преобразования матрицы. Смещение увеличивает значение цвета в каждом канале, так что темные цвета кажутся светлее. Значение по умолчанию 0.



Реализация
    public function get bias():Number
    public function set bias(value:Number):void
clampсвойство 
clamp:Boolean  [чтение и запись]

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 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
Версии среды выполнения:  1.0 9

Шестнадцатеричный цвет для замены пикселов, отсутствующих в исходном изображении. Это значение в формате RGB без альфа-компонента. Значение по умолчанию равно 0.



Реализация
    public function get color():uint
    public function set color(value:uint):void
divisorсвойство 
divisor:Number  [чтение и запись]

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

Делитель, используемый при проведении преобразования матрицы. Значение по умолчанию 1. Делитель, являющийся суммой всех значений матрицы, смягчает интенсивность цвета получаемого изображения. Значение 0 игнорируется, а вместо него используется значение по умолчанию.



Реализация
    public function get divisor():Number
    public function set divisor(value:Number):void
matrixсвойство 
matrix:Array  [чтение и запись]

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 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
Версии среды выполнения:  1.0 9

Размер x матрицы (число столбцов в матрице). Значение по умолчанию 0.



Реализация
    public function get matrixX():Number
    public function set matrixX(value:Number):void
matrixYсвойство 
matrixY:Number  [чтение и запись]

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

Размер y матрицы (число столбцов в матрице). Значение по умолчанию 0.



Реализация
    public function get matrixY():Number
    public function set matrixY(value:Number):void
preserveAlphaсвойство 
preserveAlpha:Boolean  [чтение и запись]

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 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
Версии среды выполнения:  1.0 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
Версии среды выполнения:  1.0 9

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

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

В следующем примере показано, как различные фильтры свертывания применяются к файлу изображения. Конструктор фильтров четыре раза вызывает 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);
        }
    }
}