Просмотр полной версии : Создание BitmapData из картинки, загруженной через XML
Ape4atka
01.06.2010, 20:29
Здравствуйте!
Ситуация следующая:
Есть картинки, загруженные по XML и есть функция, которая принимает в качестве аргумента объект BitmapData.
Вопрос: как создать BitmapData из имеющихся картинок?
Спасибо.
Смотрите метод 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);
Показывает белый квадратик без картинки.
Что я упустил?
А загрузки кто дожидаться будет? MovieClipLoader в помощь.
Ape4atka
01.06.2010, 22:41
mooncar
udaaff
Спасибо огромное, весь вечер убил на эту тему и наконец, благодаря вам, все заработало!!)))
Есть проблемка. С загруженного файла 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];
}
};
Кто-то сможет указать на мои ошибки?
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.