Модераторы: SoWa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сохранение изображения, фильтр, обьекты 
:(
    Опции темы
timedo
Дата 16.8.2013, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 16.11.2012

Репутация: нет
Всего: нет



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

1. У меня не получается подставлять усы когда включен фильтр. Я понимаю что в моем случае на 1 сцену налаживается 2 сцена с красной картинкой, из-за этого все обьекты находятся в 1 сцене. Но я не пойму как сделать в коде что б все работало как нужно.

2. Сохранение. У меня сцена - это fotoHolder. При сохранении, сохраняется картинка и вся сцена, при открытии картинки уже на компьютере, получается не очень красиво, как бы картинка а позади нее белый фон, как сделать так что б сохраняло лишь одну картинку? 
user posted image

Вот и сам код:
Код

import com.ryan.geom.*;
import flash.display.Sprite;
import flash.display.BitmapData;
import flash.display.MovieClip;
import flash.filters.ColorMatrixFilter;
import flash.display.Bitmap;
import flash.net.FileReference;

var fileRef:FileReference;  
var pLoader:Loader; 
var fotoHolder_Width:Number; 
var fotoHolder_Height:Number;
var fotoHolder:MovieClip;
var textTypeFilter:FileFilter; 
var moreThanZero:Boolean;

var a_mustaches:Vector.<mustaches> = new <mustaches>[]; // обьект усы
var a_heads:Vector.<heads> = new <heads>[]; // обьект шляпа

var freeTMs:Vector.<FreeTransformManager> = new <FreeTransformManager>[]; // свободная трансформация

mustache.addEventListener( MouseEvent.CLICK, createNewMustache ); // при нажатие на усы
head.addEventListener( MouseEvent.CLICK, createNewHead ); // при нажатии на шляпу

red.addEventListener( MouseEvent.CLICK, RedColor ); // при нажатии на красный квадрат
none.addEventListener( MouseEvent.CLICK, NoneClor ); // при нажатии белый квадрат

saveImg.addEventListener( MouseEvent.CLICK, mySaveImg ); // при нажатии на сохранить

function createNewMustache( event:MouseEvent ):void // создаем новый ус =)
{
   var newMustache:mustaches = new mustaches();
   a_mustaches.push( newMustache );
   fotoHolder.addChild( newMustache );
 
   var freeTransformManager:FreeTransformManager = new FreeTransformManager();
   freeTransformManager.boundingBoxOutlineColor = 0xff0000;
   freeTransformManager.boundingBoxOutlineThickness = 2;
   freeTransformManager.handleFillColor = 0xff0000;
   freeTransformManager.handleOutlineColor = 0xff0000;
   freeTransformManager.handleRadius = 6;
 
   freeTransformManager.registerSprite( newMustache,{ minScale:0.1, maxScale:4 } );
   freeTMs.push( freeTransformManager );
}

function createNewHead( event:MouseEvent ):void // создаем новую шляпу
{
   var newHead:heads = new heads();
   a_heads.push( newHead );
   fotoHolder.addChild( newHead );
 
   var freeTransformManager:FreeTransformManager = new FreeTransformManager();
   freeTransformManager.boundingBoxOutlineColor = 0xff0000;
   freeTransformManager.boundingBoxOutlineThickness = 2;
   freeTransformManager.handleFillColor = 0xff0000;
   freeTransformManager.handleOutlineColor = 0xff0000;
   freeTransformManager.handleRadius = 6;
 
   freeTransformManager.registerSprite( newHead,{ minScale:0.1, maxScale:4 } );
   freeTMs.push( freeTransformManager );
}

var raw1:BitmapData = new BitmapData( fotoHolder.width,fotoHolder.height );
var bitmap1:Bitmap = new Bitmap(raw1);

/*Заливаем все красным, делаем как бы фото фильтр*/
function RedColor(event:MouseEvent):void {
    var delitel=0;
    raw1.draw( fotoHolder, fotoHolder.transform.matrix );
    addChild(bitmap1);
    bitmap1.x=0;
    bitmap1.y=0;
    bitmap1.filters = [new ColorMatrixFilter([0.403,0.327,0.617,0.444,-65,0.634,0.23,0.921,0.311,-176,0.104,0.358,0.066,0.887,-208,0.864,0.562,0.552,0.802,-129])];

}


/*убираем фото фильтр*/
function NoneClor(event:MouseEvent):void {
    removeChild(bitmap1);
}

/*cохраняем картинку*/
function mySaveImg(event:MouseEvent):void
{
   fotoHolder.x = 1;
   fotoHolder.y = 5;
   var raw:BitmapData = new BitmapData( fotoHolder.width,fotoHolder.height );
   raw.draw( fotoHolder, fotoHolder.transform.matrix );
   var brr:ByteArray = PNGEncoder.encode( raw );
   var fil:FileReference = new FileReference();
   fil.save( brr, "image.png" );
 
}






/******Открываем фотографию(код взят с постороннего источника)*******/
    fotoHolder_Width=447; // ширина сцены
    fotoHolder_Height=339; //высота сцены
    
    pLoader=new Loader();
    fotoHolder.addChild(pLoader);
    
    fileRef=new FileReference();
    textTypeFilter=new FileFilter("Images (*.jpg, *.jpeg, *.gif, *.png)","*.jpg;*.jpeg;*.gif;*.png");
    
    fileRef.addEventListener(Event.SELECT, onFileSelected); // юзер выбрал файл в диалоге
    openFile.addEventListener("mouseDown",selectFotoPressedHandler); //  нажатие на кнопку открытия файла "Выбрать фото"
    
    function onFileSelected(evt:Event):void {
        fileRef.addEventListener(Event.COMPLETE, onComplete);
        fileRef.load();
    }
    
    function selectFotoPressedHandler(e:Event) {
        trace("selectFotoPressed");
        GoSelectFoto();
    }
    
    function onComplete(evt:Event):void {
        moreThanZero=false;
        fotoHolder_Width=447;
        fotoHolder_Height=339;
        pLoader.loadBytes(fileRef.data);
        addEventListener("enterFrame",entrFrameHandler);
    }
    
    function GoSelectFoto() {
        fileRef.browse([textTypeFilter]); // выбор файла  посредством открытия стандартного диалога браузера
    }
    
    function entrFrameHandler(e:Event) {
        if (! moreThanZero) {
        if (pLoader.width>0) {
        moreThanZero=true;
        resizePicture();
     } else {
        trace("waiting...");
     } } }
     
     function resizePicture() {
         var delitel=0;
         pLoader.x=0;
         pLoader.y=0;
         if (pLoader.width>fotoHolder_Width || pLoader.width<fotoHolder_Width) {
         delitel=pLoader.width/fotoHolder_Width;
         pLoader.width=pLoader.width/delitel;
         pLoader.height=pLoader.height/delitel;
     }
     
      if (pLoader.height>fotoHolder_Height || pLoader.height>fotoHolder_Height) {
         delitel=pLoader.height/fotoHolder_Height;
         pLoader.height=pLoader.height/delitel;
         pLoader.width=pLoader.width/delitel;
     }
         pLoader.x=(fotoHolder_Width-pLoader.width)/2;
         pLoader.y=(fotoHolder_Height-pLoader.height)/2;
         trace("resized");
    }




Исходники сохранены для flash версии cs5 и cs6.
cs5 http://yadi.sk/d/X8GeOhlG7ypkS
cs6 http://yadi.sk/d/Pf8hTQnO7ypku
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | ActionScript 3 | Следующая тема »


 




[ Время генерации скрипта: 0.1109 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.