Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   BitmapData не дает узнать ее width, возможно после applyFilter (http://www.flasher.ru/forum/showthread.php?t=130697)

dump13 02.10.2009 00:14

BitmapData не дает узнать ее width, возможно после applyFilter
 
Здравствуйте,
проблема такая: имеется класс 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 добавлял, чтобы улучшить производительность, но видимо это как-то не так делается :)


Часовой пояс GMT +4, время: 17:27.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.