Здравствуйте. Внезапно наткнулся на совершенно неожиданный момент, который затормозил мой проект и скоро добавит седых волос.
Идея была простая - вытащить из шейпа его растровую заливку (
bitmapData) при помощи
readGraphicsData. Но вдруг обнаружилось, что если это сделать из конструктора, то вылетает ошибка
Error #2015: Invalid BitmapData как топор в спину. А если сделать это вне конструктора, то - всё работает.
Какова причина этой ошибки и как её избежать? Ведь мне необходимо проделывать эту операцию в конструкторе.
p.s. flashPlayer 14, -swf-version=25 прописано.
Набросал очень простой пример с этим багом(?), и если что, проект FD прикрепляю тоже.
Код AS3:
package
{
import flash.display.Bitmap;
import flash.display.GraphicsBitmapFill;
import flash.display.IGraphicsData;
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.utils.setTimeout;
/**
* ...
* @author samana
*/
public class Main extends Sprite
{
[Embed(source = "../images/flasher_logo_2013.png")]
private var ImageClass:Class;
private var _shape:Shape;
public function Main():void
{
//если вызвать в конструкторе то Error #2015: Invalid BitmapData.
stage_click();
//если вызвать после отработки конструктора, то всё хорошо
//stage.addEventListener(MouseEvent.CLICK, stage_click);
//setTimeout(stage_click, 1);
}
private function stage_click(e:MouseEvent=null):void
{
// создаю шейп с растровой заливкой
_shape = new Shape();
_shape.graphics.beginBitmapFill((new ImageClass() as Bitmap).bitmapData);
_shape.graphics.drawRect(0, 0, 800, 300);
_shape.graphics.endFill();
addChild(_shape);
// пытаюсь вытянуть заливку из шейпа
var graphicsData:Vector.<IGraphicsData> = _shape.graphics.readGraphicsData();
trace(graphicsData);// [object GraphicsBitmapFill],[object GraphicsPath],[object GraphicsEndFill]
var fill:GraphicsBitmapFill = graphicsData[0] as GraphicsBitmapFill;
trace(fill);// [object GraphicsBitmapFill]
trace(fill.bitmapData);// [object BitmapData]
trace(fill.bitmapData.width); //[Fault] exception, information=ArgumentError: Error #2015: Invalid BitmapData.
}
}
}
bug.rar