Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 16.08.2013, 13:53
timedo вне форума Посмотреть профиль Отправить личное сообщение для timedo Найти все сообщения от timedo
  № 1  
Ответить с цитированием
timedo

Регистрация: Apr 2013
Сообщений: 32
По умолчанию Сохранение изображения, фильтр, объекты

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

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

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

Вот и сам код:
Код AS3:
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.(прикреплены ниже)
Миниатюры
Нажмите на изображение для увеличения
Название: 1.jpg
Просмотров: 126
Размер:	38.6 Кб
ID:	29918  
Вложения
Тип файла: 7z cs5.7z (159.6 Кб, 43 просмотров)
Тип файла: 7z cs6.7z (157.9 Кб, 55 просмотров)

Создать новую тему   Часовой пояс GMT +4, время: 19:40.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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