Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Последующая загрузка фото в спрайт (http://www.flasher.ru/forum/showthread.php?t=159731)

geka96 04.07.2011 22:05

Последующая загрузка фото в спрайт
 
Здравствуйте! Подскажите, пожалуйста...) Не могу понять что такое...в общем при нажатии на кнопку, выбирается фото с компа и загружается в спрайт...а при следующем нажатии, опять выполняется тоже самое: выбирается фото, но в спрайт оно загружается маленькое чем должно быть загружено...вообще не пойму, что такое...4 дня маюсь в пустоте...
Выяснил только вот что, если сначала загрузить фото большого масштаба, а потом поменьше, то фото, которое поменьше загрузится в спрайт очень маленькое...не как должно быть загружено...(как должно быть загружено можно проверить, загрузив его первым)...короче какой-то казус не понятный...может кто-нибудь на свежую голову сообразит, что нужно сделать?!

Кто поможет, отблагодарю на всю жизнь!))

Вот исходник: http://www.varyag207.ru/load_foto.rar

Vier 04.07.2011 22:42

У вас ошибка в том, что foto1_Sprite ресайзится только первый раз, далее он не трогается, и берутся первый раз установленные размеры. В ресайз передавайте параметры от реальной bmp.
Ну и убивайте добавленных child'ов.

P.s. ресайз делайте лучше как-то так:
Код AS3:

if(img.width > stageW || img.height > stageH) {
    var sc:Number = Math.min(stageW/img.width,stageH/img.height);
    img.scaleX *= sc;
    img.scaleY *= sc;
}


geka96 05.07.2011 10:52

Дружище, спасибо тебе большое!!!) Сам бы не догадался))

Добавлено через 1 час 51 минуту
Vier, не подскажешь ещё одну вещь...когда удаляю Child'ы, то при 4-ом удалении, новый bitmap накладывается на старый не очищенный...

P.S. с компа фото загружаются нормально, а с нета вот так...при 4 удалении накладывается...что это может быть?

Vier 05.07.2011 15:11

Покажи код, как удаляешь. И как загружаешь по сети. А вообще, есть такая волшебная вещь, как дебагер )

geka96 05.07.2011 15:54

Вот собрал исходник с проблемой: http://www.varyag207.ru/load_problem.rar

В какой-то момент перестаёт работать удаление и всё начинает наслаиваться...попробуй, загрузи сначала фото с компа, потом из сети и ещё раз с компа и из сети, и после этого начнёт наслаиваться одно изображение на другое...т.к. перестает удалятся...не пойму почему...

Vier 05.07.2011 16:02

Честно говоря, скачивать fla неудобно и под рукой нет адобовских программ. Выложи текст скрипта сюда, все будет понятно.

geka96 05.07.2011 16:16

Понятно..) Вот код:
Код AS3:

var fileRef:FileReference;
var pLoader:Loader;
var resizeObject = {w:350,h:280};
var textTypeFilter:FileFilter;
var foto1_Sprite:Sprite=new Sprite();
var foto2_Sprite:Sprite=new Sprite();
var bmp:Bitmap;
var bmp2:Bitmap;
pLoader=new Loader();
 
addChild(foto1_Sprite);
addChild(foto2_Sprite);
 
eshe.visible = false;
 
fileRef=new FileReference();
textTypeFilter = new FileFilter("Images (*.jpg, *.jpeg, *.gif, *.png)","*.jpg;*.jpeg;*.gif;*.png");
fileRef.addEventListener(Event.SELECT, onFileSelected);
selectBTN.addEventListener("mouseDown",selectFotoPressedHandler);
function onFileSelected(evt:Event):void
{
        fileRef.addEventListener(Event.COMPLETE, onComplete);
        fileRef.load();
}
function onComplete(evt:Event):void
{
        pLoader.contentLoaderInfo.addEventListener(Event.INIT,imageInited);
        pLoader.loadBytes(fileRef.data);
}
function imageInited(evt:Event):void
{
        var myBitmapData:BitmapData = new BitmapData(pLoader.width,pLoader.height);
 
        myBitmapData.draw(pLoader);
 
        bmp = new Bitmap(myBitmapData);
        bmp2 = new Bitmap(myBitmapData);
 
        foto1_Sprite.addChild(bmp);
        foto2_Sprite.addChild(bmp2);
        // запуск ресайза;
        resizePicture();
}
 
function selectFotoPressedHandler(e:Event)
{
        fileRef.browse([textTypeFilter]);
}
 
function resizePicture()
{
        trace("Ресайз!");
        if (bmp2.width > resizeObject.w || bmp2.height > resizeObject.h)
        {
                var sc:Number = Math.min(resizeObject.w / bmp2.width,resizeObject.h / bmp2.height);
                bmp2.scaleX *=  sc;
                bmp2.scaleY *=  sc;
 
                // ресайз копии
                foto1_Sprite.width = foto2_Sprite.width = bmp2.width;
                foto1_Sprite.height = foto2_Sprite.height = bmp2.height;
        }
 
        foto1_Sprite.x = foto2_Sprite.x;
        foto1_Sprite.y = foto2_Sprite.y;
 
        selectBTN.visible = false;
        loadAva.visible = false;
        eshe.visible = true;
}
 
//Загрузить фото из сети
var lc:LoaderContext;
loadAva.addEventListener(MouseEvent.CLICK,onClickLoadAva);
function onClickLoadAva(e:Event):void
{
        lc = new LoaderContext(true);
        pLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageInited);
        pLoader.load( new URLRequest("http://cs1495.vkontakte.ru/u00001/a_04766c4c.jpg"), lc );
}
 
//Загрузить фото ещё раз с компа
eshe.addEventListener(MouseEvent.CLICK,onClickEshe);
function onClickEshe(e:Event):void
{
        loadAva.visible = true;
        selectBTN.visible = true;
        eshe.visible = false;
 
        //Удалить фото
        foto1_Sprite.removeChild(bmp);
        foto2_Sprite.removeChild(bmp2);
}

Заранее спасибо)

Vier 05.07.2011 17:34

Я не понял в чем тайный смысл создания копии. И скейлить нужно либо bmp, либо foto1_Sprite. Обнулять контейнер после загрузки. Как-то так:

Код AS3:

function imageInited(evt:Event):void {
 
        var myBitmapData:BitmapData = new BitmapData(pLoader.width,pLoader.height);
        myBitmapData.draw(pLoader);
        bmp = new Bitmap(myBitmapData);
 
        // запуск ресайза;
        resizePicture(bmp.width, bmp.height);
 
        while(foto1_Sprite.numChildren>0) {
            foto1_Sprite.removeChildAt(0);
        }
 
        foto1_Sprite.addChild(bmp);
}
 
function resizePicture(myWid:int, myHeight:int):void {
 
        trace("Ресайз!");
        if (myWid > resizeObject.w ||  myHeight > resizeObject.h)
        {
                var sc:Number = Math.min(resizeObject.w/myWid,resizeObject.h/myHeight);
                foto1_Sprite.scaleX *=  sc;
                foto1_Sprite.scaleY *=  sc;
 
        }
 
        selectBTN.visible = false;
        loadAva.visible = false;
        eshe.visible = true;
}


geka96 05.07.2011 18:00

Vier, спасибо Вам огромнейшее!)) У самого даже в мыслях не было, что так можно обнулить контейнер..теперь буду знать!)) Ещё раз спасибо! Очень помогли!))


Часовой пояс GMT +4, время: 15:48.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.