PDA

Просмотр полной версии : Загрузка jpg и присвоение ЕЙ Linkage


qwr
11.02.2008, 04:30
Помогите. Уже не первый день мучаю вас вопросами. Наконец смог сформулировать и понять, что мне конкретно нужно.

Нужно что бы загружалась картинка. Ей присвоивался Linkage. Именно ей, а не мувиклипу, в который ее можно загрузить. Потому что мне нужно после загрузки трансормировать ее вот этим кодом:

function ldbmp() {
var bmp=BitmapData.loadBitmap("pic");
var pic:DistortBitmap=InstanceManager.createMC(this,DistortBitmap,bmp,5,3);
var distortPointsArr:Array=[];
distortPointsArr.push(new Point(128,52));
distortPointsArr.push(new Point(38,48));
distortPointsArr.push(new Point(38,176));
distortPointsArr.push(new Point(128,162));
pic.distort(distortPointsArr);
}

При нажатии кнопки - удалить Linkage, что бы можно было его присвоить следующей картинки

Помогите плиз. Уже почти неделю мочаюсь то с одним, то с другим. Учусь потихоньку.

iNils
11.02.2008, 04:40
Linkage можно присвоить ТОЛЬКО объекту в библиотеке fla, в swf это невозможно.

Однако для вашей задачи нужно совсем другое. А именно:
1. Загрузить картинку в мувиклип.
2. Создать пустой объект BitmapData под размеры картинки
3. Снять изображение из мувилипа в BitmapData с помощью метода draw ().
4. Удалить загрузочный мувиклип.

qwr
11.02.2008, 05:53
Что то неполучается... Что я неправильно делаю?

import com.silin.InstanceManager;
import com.silin.DistortBitmap;
import flash.display.BitmapData;
import flash.geom.*;

r = 0;

function DistBmp() {
var bmp = BitmapData.loadBitmap("newbmp");
var pic:DistortBitmap = InstanceManager.createMC(this, DistortBitmap, bmp, 5, 3);
var distortPointsArr:Array = [];
distortPointsArr.push(new Point(128, 52));
distortPointsArr.push(new Point(38, 48));
distortPointsArr.push(new Point(38, 176));
distortPointsArr.push(new Point(128, 162));
pic.distort(distortPointsArr);
}

if (r == 0) {
var my_mcl:MovieClipLoader = new MovieClipLoader();
var my_obj:Object = new Object();
my_mcl.loadClip("pic1.jpg",clip);
my_obj.onLoadProgress = function(clip, bytesLoaded, totalBytes) {
progres_tf.text = Math.round(bytesLoaded/totalBytes*100)+"%";
};
my_obj.onLoadComplete = function(clip) {
newbmp = new BitmapData(200, 196, true, 0x0);
newbmp.draw(clip);
DistBmp();
delete my_obj;
delete my_mcl;
};
my_mcl.addListener(my_obj);
}

Исходник: 18849

udaaff
11.02.2008, 06:10
попробуйте так:
var pic:DistortBitmap = InstanceManager.createMC(this, DistortBitmap, newbmp, 5, 3);
upd: и onLoadComplete() на onLoadInit() заменить

qwr
11.02.2008, 06:17
Спасибо огроменное! Вы гении! Все заработало!

qwr
11.02.2008, 07:30
Есть еще наверное ошибка тут...

Столкнулся с еще одной проблеммой - При каждом вызове этого кода все больше и больше пожирается системных ресурсов.
Раз 20 кликнул на кнопочку и комп уже висит...

Подскажите, где ошибка. Видимо что то загружается и не удаляется. Остается в памяти...

Molecula
11.02.2008, 11:02
Хм, может dispose() поможет.

qwr
11.02.2008, 16:10
Не помогает.

Вот какой у меня в итоге код:

import com.silin.InstanceManager;
import com.silin.DistortBitmap;
import flash.display.BitmapData;
import flash.geom.*;

r = 1;

function slideshow() {
i = "pic"+r+".jpg";
function DistBmp() {
var bmp = BitmapData.loadBitmap("newbmp");
var pic:DistortBitmap = InstanceManager.createMC(this, DistortBitmap, newbmp, 5, 3);
var distortPointsArr:Array = [];
distortPointsArr.push(new Point(560, 90));
distortPointsArr.push(new Point(160, 100));
distortPointsArr.push(new Point(160, 480));
distortPointsArr.push(new Point(560, 410));
pic.distort(distortPointsArr);
}

var my_mcl:MovieClipLoader = new MovieClipLoader();
var my_obj:Object = new Object();
my_mcl.loadClip(i,clip);
my_obj.onLoadProgress = function(clip, bytesLoaded, totalBytes) {
progres_tf.text = Math.round(bytesLoaded/totalBytes*100)+"%";
};
my_obj.onLoadInit = function(clip) {
newbmp.dispose();
newbmp = new BitmapData(200, 196, true, 0x0);
newbmp.draw(clip);
DistBmp();
delete my_obj;
delete my_mcl;
};
my_mcl.addListener(my_obj);
}

if (r == 1) {
slideshow();
}

Подскажите, где ошибка.

qwr
11.02.2008, 19:21
Помогите пожалуйста! Если бы я сам мог разобратся - я бы не спрашивал...

Я залил полный исходник сюда: исходник (http://stass.my1.ru/Ya.zip) (10 Мб)

саму флэшку, что бы поглядеть характер тормозов, можно глянуть тут (http://stass.my1.ru/). (400 кб) Через несколько раз нажатий на кнопку next или back становится заметно, как мувик начинает тормозить. Кинолента начинает двигатся рывками. И т.п.

iNils
12.02.2008, 05:35
При каждом шаге, createMC создает новый мувиклип с картинкой, не удаляя старый.

qwr
12.02.2008, 07:41
Ох! Спасибо! Какой же я идиот! =)) Все заработало!

http://anekdotov.net/pic/postcards/beer/bottle_gold_03.gifhttp://anekdotov.net/pic/postcards/beer/bottle_gold_03.gif