Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 02.10.2009, 00:14
dump13 вне форума Посмотреть профиль Отправить личное сообщение для dump13 Найти все сообщения от dump13
  № 1  
Ответить с цитированием
dump13

Регистрация: Apr 2009
Сообщений: 30
По умолчанию 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, время: 08:14.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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