Я пытаюсь найти перекрытие между элементами на холсте гибкого провода, адаптации http://www.gskinner.com/blog/archives/2005/08/flash_8_shape_b.html
Попытка здесь состоит в том, чтобы поместить некоторое перекрытие текста и числа с ранее помещенным текстом. Простой пример ниже иллюстрирует проблему.
Оба ImageSnapshot.captureBitmapData (холст); или BitmapData.draw (холст);
кажется, не получаю элементы, помещенные в холст динамично.
Какие-либо подсказки о том, как я могу выполнить это?
Заранее спасибо за любую справку.-vivek
Вызов addChild не делает компонент сразу видимым / доступным в его родительском элементе. Перед захватом растрового изображения необходимо завершить процесс создания, который включает в себя несколько этапов / событий. Поместите код захвата в отдельный метод и вызовите его ПОСЛЕ завершения процесса создания для вашего динамически создаваемого компонента. Сделайте это с помощью метода callLater, который поместит ваш вызов метода в конец очереди событий. Вот ваш код с добавленным callLater (не очень красиво, но, надеюсь, он уловил суть):
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
creationComplete="init()">
<fx:Script>
<![CDATA[
import mx.controls.Image;
import mx.controls.Text;
import mx.graphics.ImageSnapshot;
public function init():void {
var l:Label = new Label();
l.text = 'Dynamic Label!';
l.x = text.x+50;
l.y = text.y;
canvas1.addElement(l);
this.callLater(addRect);
}
private function addRect():void {
var bounds:Rectangle = text.getBounds(this);
trace(bounds.top + ',' + bounds.left + ',' + bounds.width + ',' + bounds.height);
var bmd:BitmapData = new BitmapData(text.width, text.height);
bmd.draw(text);
var bm:Bitmap = new Bitmap(bmd);
var img:Image = new Image();
img.source = bm;
img.x = 0;
img.y = 20;
canvas2.addChild(img);
var c2:BitmapData = ImageSnapshot.captureBitmapData(canvas1);
var bmd2:BitmapData = new BitmapData(text.width,text.height);
bmd2.copyPixels(c2,bounds,new Point(0,0));
var bm2:Bitmap = new Bitmap(bmd2);
var img2:Image = new Image();
img2.source = bm2;
img2.x = 0;
img2.y = 50;
canvas2.addChild(img2);
var c3:BitmapData = new BitmapData(canvas1.width, canvas1.height);
c3.draw(canvas1);
var bmd3:BitmapData = new BitmapData(text.width,text.height);
bmd3.copyPixels(c3,bounds,new Point(0,0));
var bm3:Bitmap = new Bitmap(bmd2);
var img3:Image = new Image();
img3.source = bm3;
img3.x = 0;
img3.y = 50;
canvas3.addChild(img3);
}
]]>
</fx:Script>
<mx:Canvas id="canvas1" width="400" height="100" backgroundColor="#FF0000">
<s:Label id="text" x="200" y="50" text="This is a test"/>
</mx:Canvas>
<mx:Canvas id="canvas2" y="100" width="400" height="100" backgroundColor="#00FF00"/>
<mx:Canvas id="canvas3" y="200" width="400" height="100" backgroundColor="#0000FF"/>
</s:Application>