PDA

Просмотр полной версии : Копирование загруженных картинок через BitmapData


SeaQuest
18.01.2009, 18:36
Собсно:
//Загружаем картинку в мувик-контейнер
var mc_ldr:MovieClipLoader = new MovieClipLoader();
var Listener:Object = new Object();
Listener.onLoadStart = function(mc:MovieClip) {}
Listener.onLoadComplete = function(mc:MovieClip) {}
_root.createEmptyMovieClip("mc1",0);
mc_ldr.loadClip("bg.jpg",mc1);
mc_ldr.addListener(Listener);

// Теперь картинка в mc1 и пытаемся ее скопировать в другой программный мувик

import flash.display.BitmapData;
var bmd: BitmapData = new BitmapData(100, 100, true, 0x000000);
bmd.draw(mc1);
_root.createEmptyMovieClip("mc2",1);
_root.mc2._x = 200;
_root.mc2.attachBitmap(bmd,1,'auto',true);

Не работает.:mad: На форуме в инете об этом только разговор, а работающего кода-примера так и не нашел. А справка от adobe - упаси боже, ее понимают только профи.

chingachgoog
18.01.2009, 18:50
Вторая часть кода должна выполняться ПОСЛЕ срабатывания onLoadComplete, а у вас она выполняется ДО.

SeaQuest
18.01.2009, 19:17
//Загружаем картинку в мувик-контейнер
var mc_ldr:MovieClipLoader = new MovieClipLoader();
var Listener:Object = new Object();
Listener.onLoadStart = function(mc:MovieClip) {
};
Listener.onLoadComplete = function(mc:MovieClip) {
import flash.display.BitmapData;
var bmd:BitmapData = new BitmapData(100, 100, true, 0x000000);
bmd.draw(mc1);
_root.createEmptyMovieClip("mc2",1);
_root.mc2._x = 200;
_root.mc2.attachBitmap(bmd,1,'auto',true);
}
_root.createEmptyMovieClip("mc1",0);
mc_ldr.loadClip("bg.jpg",mc1);
mc_ldr.addListener(Listener);

И так не работает.

iNils
18.01.2009, 19:25
Работает. Хотя вместо onLoadComplete стоит использовать onLoadInit.

DarkLight
18.01.2009, 19:31
1) вынесите import наружу из обработчика, так писать нехорошо, импорты принято писать в начале кода
2) содержимое становится доступно при вызове onLoadInit, а не onLoadComplete - смените обработчик где происходит отрисовка - и все заработает

Работает. Хотя вместо onLoadComplete стоит использовать onLoadInit.
Разве? У меня на комплит не работает, только на Init, Flash CS3, AS2

iNils
18.01.2009, 19:35
Вот и я удивился, что работает. Но потом понял, что не зря я onLoadInit упомянул, так как я видел загруженную фотку, а не битмап :)

Fatality
18.01.2009, 20:02
А справка от adobe - упаси боже, ее понимают только профи.
Ура!!! я профи :) ибо уже пол года как справка меня выручает.

SeaQuest
18.01.2009, 20:44
import flash.display.BitmapData;
var mc_ldr:MovieClipLoader = new MovieClipLoader();
var Listener:Object = new Object();
Listener.onLoadStart = function(mc:MovieClip) {
};
Listener.onLoadInit = function(mc:MovieClip) {

var bmd:BitmapData = new BitmapData(100, 100, true, 0x000000);
bmd.draw(mc1);
_root.createEmptyMovieClip("mc2",1);
_root.mc2._x = 200;
_root.mc2.attachBitmap(bmd,1,'auto',true);
}
_root.createEmptyMovieClip("mc1",0);
mc_ldr.loadClip("bg.jpg",mc1);
mc_ldr.addListener(Listener);


Действительно работает! А почему не хочет при onLoadComlete?
И вообще мне нужно чтобы копирование работало за пределами функции, тогда как?

DarkLight
18.01.2009, 21:30
А почему не хочет при onLoadComlete?
Пункт 2 моего ответа: недоступно содержимое еще. В as1 и as2 onLoadComplete показывает что файл загружен на 100%, до отображения его на экране, доступа к данным картинки или коду загруженного swf(если грузим флешку). В as3 кстати это уже не так.

И вообще мне нужно чтобы копирование работало за пределами функции, тогда как?
Вынесите код копирования в отдельную функцию. Только не забывайте, что вызов функции должен осуществляться после завершения загрузки картинки.

SeaQuest
19.01.2009, 19:16
Спасибо за помощь всем! Выкладываю исходник меню. Хочу улучшить и расширить то, что сделал. Уверен корявости в нем немало, а потому буду благодарен за предложения как сделать лучше типа встроить все в класс, убрать то, добавить это, воспользоваться тем-то. Все что видите в исходнике – сырой проект. Но базовые вещи такие как нарезка картинки и встройка ее в кнопку уже есть. Важная особенность: пункты сами будут раздвигаться для подпунктов в вертикальной плоскости с различными эффектами. Подскажите есть ли возможность нарезать картинку не масками и если да, то будет ли это лучше.
Чем менюшка обзаведется:
- xml файлом настройки
- флешкой настройки xml файла
- возможность рандомно подгружать фоновые картинки
- подпунктами
- эффектами появления подпунктов, пунктов, смены фоновых картинок
Прошу кому не лень, всего лишь развернуто направить меня в нужном направлении.