PDA

Просмотр полной версии : Не правильно выводит картинку


Merican
05.03.2014, 13:55
Задача: пользователь загружает картинку во флеш, она обрезается маской.
После, при нажатии кнопки, должна выводится обрезанная картинка. Но выводится та же, то есть без изменений.
Пожалуйста подскажите, как исправить?

var loader:Loader = new Loader();
mc.mc1.mc2.addChild(loader);

var fr:FileReference = new FileReference();

fr.addEventListener(Event.SELECT, onselect);
fr.addEventListener(Event.COMPLETE, oncomplete);

import_btn.addEventListener(MouseEvent.CLICK, onloade);
function onloade(e:MouseEvent)
{
var filefilter:FileFilter = new FileFilter("JPG Files","*.jpg");
fr.browse([filefilter]);
}

function onselect(e:Event)
{
fr.load();
}

function oncomplete(e:Event)
{
var byteArray:ByteArray = e.currentTarget["data"];
loader.loadBytes(byteArray);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,mycomplete);

}

function mycomplete(e:Event)
{

export_btn.addEventListener(MouseEvent.CLICK, onsave);
}

function onsave(e:MouseEvent)
{
var bitmabdata:BitmapData = new BitmapData(loader.width,loader.height,true,0);
bitmabdata.draw(loader);
var jpdencoder:JPGEncoder = new JPGEncoder(100);
var mybyte:ByteArray = jpdencoder.encode(bitmabdata);
var myfile:FileReference=new FileReference();
myfile.save(mybyte,"test.jpg");
}

КорДум
05.03.2014, 14:08
А где в вашем коде маска?

alexandrratush
05.03.2014, 14:10
Вот тут я так понял вы добавляете вашу картинку в список отображения
mc.mc1.mc2.addChild(loader);

Тогда при сохранении в функции onsave вам нужно снимать BitmapData не с loader, а с mc.mc1.mc2, смотря к какому child'y у вас применяется маска.

Добавлено через 1 минуту
А где в вашем коде маска?
Скорее всего нарисована руками в кадрах.

Merican
05.03.2014, 16:16
Немного переделал конец кода, теперь выводит картинку уже с маской, не не того размера которого нужно. То есть, та часть что обрезалась маской остается белой и чем больше картинка тем больше белой части.
Возможно ли сделать так, чтоб снимок делался только вокруг картинки?

var myfile:FileReference=new FileReference();
function onsave(e:MouseEvent):void
{
var bitmabdata:BitmapData = new BitmapData(mc.width,mc.height);
bitmabdata.draw(mc);
var encoder:JPGEncoder = new JPGEncoder();
var mybyte:ByteArray = encoder.encode(bitmabdata);
myfile.save(mybyte,"test.jpg");
}


http://cs313723.vk.me/v313723035/73ff/m5IUfKRsIPw.jpg

Добавлено через 2 минуты
Да именно так, нарисована руками:)


Скорее всего нарисована руками в кадрах.

samana
05.03.2014, 16:38
var bitmabdata:BitmapData = new BitmapData(mc.width,mc.height);
Вы ведь и создаёте такую большую картинку. А вам нужно отталкиваться от размеров маски и её позиции.

Merican
05.03.2014, 16:53
Разобрался! Огромное спасибо! :yahoo: