2010-02-16 1 views
0

У меня 2 SWFLoaders как так:Flex: Копирование BitmapData загруженного изображения в другой SWFLoader

<mx:SWFLoader width="10" height="10" complete="imageLoaded()" id="ldr_src" source="img.jpg" scaleContent="true"/> 
<mx:SWFLoader id="ldr_target" scaleContent="true"/> 

private function imageLoaded():void{ 
    var bm:Bitmap = new Bitmap(ImageSnapshot.captureBitmapData(ldr_src); 
    ldr_target.source = bm; 
} 

Все здесь работает, как и ожидалось, за исключением одной маленькой мелочью:

я загрузить изображение размера 100x100 в ldr_src (что составляет 10x10). Растровое изображение копируется в ldr_target, но с неожиданными результатами. Я бы подумал, что размер загруженного изображения размером 10x10 будет скопирован. Вместо этого растровое изображение от (0,0) до (10,10) загруженного изображения копируется в цель.

Независимо от того, каков фактический размер изображения, как скопировать bitmapData размера, уменьшенного swfLoader?

ответ

2

Пропустите image.content в ImageSnapshot.captureBitmapData, то убедитесь, что ширина/высота ldr_target устанавливается равной ЦСИ:

<mx:SWFLoader width="10" height="10" complete="imageLoaded()" id="ldr_src" source="img.jpg" scaleContent="true"/> 
<mx:SWFLoader width="10" height="10" id="ldr_target" scaleContent="true"/> 

private function imageLoaded():void 
{ 
    var bm:Bitmap = new Bitmap(ImageSnapshot.captureBitmapData(ldr_src.content)); 
    ldr_target.source = bm; 
}   

Lance

+0

Спасибо так много для ответ, ты спас мой день! :) – Yeti

+0

приятно, приятно слышать! –

0

Я пытался сделать что-то подобное, но с видео источник, а не изображение. Спасибо, спасибо. (По какой-то причине класс «ImageSnapshot» действительно хорошо держится в секрете в Adobe.)

0

Вы можете также использовать метод BitmapData.draw, чтобы получить снимок DisplayObject, который реализует IBitmapDrawable

Смежные вопросы