Здравствуйте,
проблема такая: имеется класс AGBlur, который наследует свойство _output:*, при вызове process() он приводит ее к BitmapData и применяет BlurFilter. Если все в таком виде, как показано ниже, то вылетает ошибка
Цитата:
ArgumentError: Error #2015: Недопустимые данные BitmapData.
at flash.display::BitmapData/get height()
|
Вот сам класс.

Код AS3:
package main.engine.ag {
import flash.geom.Rectangle;
import flash.geom.Point;
import flash.display.BitmapData;
import flash.filters.BlurFilter;
import main.engine.ag.AGUnit;
import main.engine.ag.AltGen;
public class AGBlur extends AGUnit {
protected var _blurX:Number,
_blurY:Number,
_quality:int,
_bitmapData:BitmapData;
public function AGBlur (altgen:AltGen=null, blurX:Number=4.0, blurY:Number=4.0, quality:int=1) {
super (altgen, 1);
_blurX=blurX;
_blurY=blurY;
_quality=quality;
_bitmapData=new BitmapData (1, 1);
}
public override function clone ():AGUnit {
return AGUnit (new AGBlur (_altgen, _blurX, _blurY, _quality));
}
public override function process ():void {
if (_parents[0] == null) {_output = null; return;}
var po:* = _parents[0].output;
if (po is BitmapData) {
var out:BitmapData = BitmapData (po);
//trace (_bitmapData); // output: [object BitmapData]
// trace (_bitmapData.height); // error occurs here
if (_bitmapData.height != out.height || _bitmapData.width != out.width) { // я закомментировал здесь
//if (true) { // и раскомментировал здесь
_bitmapData = new BitmapData (out.width, out.height); // заработало
}
_bitmapData.applyFilter (out, out.rect, new Point (), new BlurFilter (_blurX, _blurY, _quality));
_output = _bitmapData;
}
}
public override function outputCache ():void {
_output = BitmapData (_cache).clone ();
}
public override function fillCache ():void {
_cache = BitmapData (_output).clone ();
}
// GETTERS & SETTERS
public function get blurX ():Number {
return _blurX;
}
public function set blurX (value:Number):void {
_blurX=value; _altgen.addModUnit (this);
}
public function get blurY ():Number {
return _blurY;
}
public function set blurY (value:Number):void {
_blurY=value; _altgen.addModUnit (this);
}
public function get quality ():Number {
return _quality;
}
public function set quality (value:Number):void {
_quality=value; _altgen.addModUnit (this);
}
}
}
Если сделать так, как показано в комментах, все работает. _bitmapData добавлял, чтобы улучшить производительность, но видимо это как-то не так делается
