PDA

Просмотр полной версии : Создание BitmapData из картинки, загруженной через XML


Ape4atka
01.06.2010, 20:29
Здравствуйте!
Ситуация следующая:
Есть картинки, загруженные по XML и есть функция, которая принимает в качестве аргумента объект BitmapData.
Вопрос: как создать BitmapData из имеющихся картинок?
Спасибо.

mooncar
01.06.2010, 20:41
Смотрите метод BitmapData.draw
Создайте новую битмапу. Отрисуйте с помощью этого метода в нее мувик, куда загрузили картинку. Выгрузите мувик, он больше не нужен. Всё, у вас в памяти теперь есть битмапа с этой картинкой.

Ape4atka
01.06.2010, 22:13
Спасибо, принцип понял, для проверки написал следующий код:
_global.btmp = new BitmapData(95, 95);

_root.createEmptyMovieClip("cont_mc", _root.getNextHighestDepth());
_root.createEmptyMovieClip("cont2_mc", _root.getNextHighestDepth());
_root.cont_mc.loadMovie(_global.costPrevSmall_array[0]);
_global.btmp.draw(cont_mc);
removeMovieClip(_root.cont_mc);
_root.cont2_mc.attachBitmap(_global.btmp, 0);

Показывает белый квадратик без картинки.
Что я упустил?

udaaff
01.06.2010, 22:17
А загрузки кто дожидаться будет? MovieClipLoader в помощь.

Ape4atka
01.06.2010, 22:41
mooncar
udaaff
Спасибо огромное, весь вечер убил на эту тему и наконец, благодаря вам, все заработало!!)))

regman
17.01.2011, 11:13
Есть проблемка. С загруженного файла XML мы имеем пути к файлам arFiles и их описания arNames. Я пробую потом по этим путям их забитмапить в массив bmpArray прорисовывая (Draw) через главный контейнер holder (пробовал грузить в новосозданный контейнер tempMC - но тогда пр показе мувика вообще ничего не показывает). И после загрузки этих 5-ти файликов, нужно вывести (тоесть зааттачить с массива) первую картинку и ее описания в главный контейнер.

Проблема в том, что XML и его данные нормально заносятся в массивы. Но вот почему-то при показе мувика - только последняя картинка выводится, но с первым описанием.
import flash.display.BitmapData;

var arNames:Array = [];
var arFiles:Array = [];
var bmpArray:Array = [];
var imgIndex:Number = 0;
var FilesCount:Number = 0;

var xmlData:XML = new XML();
xmlData.ignoreWhite = true;
xmlData.onLoad = loadXML;
xmlData.load('descr.xml');

var bmpData:BitmapData = new BitmapData(500, 375);
var tempMC:MovieClip = _root.CreateEmptyMovieClip("tempMC", 0);

var loader:MovieClipLoader = new MovieClipLoader();
var listener:Object = new Object();
loader.addListener(listener);
listener.onLoadInit = function (target_mc:MovieClip)
{
holder._height = 375;
holder._width = 500;
bmpData.draw(holder);
bmpArray[imgIndex] = bmpData;
if (imgIndex == FilesCount-1)
{
_root.holder.attachBitmap(bmpArray[0], 0);
_root['Display'].text = arNames[0];
imgIndex = 0;
}
};

function loadXML (success:Boolean)
{
if (success)
{
var node:XMLNode = this.firstChild ;
var total:Number = node.childNodes.length ;
for( i = 0; i < total; i++)
{
var fName:String = node.childNodes[i].attributes['name'];
var fFile:String = node.childNodes[i].attributes['file'];
arNames[i] = fName;
arFiles[i] = fFile;
FilesCount = arFiles.length;
};
for (i = 0; i <= FilesCount-1; i++)
{
imgIndex = i;
loader.loadClip(arFiles[i], holder);
};
};
};

nextPic.onPress = function ()
{
if (imgIndex <= FilesCount-1)
{
imgIndex++;
_root.holder.attachBitmap(bmpArray[imgIndex]);
_root['Display'].text = arNames[imgIndex];
}
};

regman
20.01.2011, 13:44
Кто-то сможет указать на мои ошибки?