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

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

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

Регистрация: Mar 2011
Сообщений: 28
По умолчанию Как сделать zoom компонента <mx:Canvas> ?!

У меня есть приложение которое убирает красные глаза с загружаемой фотографии,
помогите сделать так, что бы это изображение можно было приближать и отдалять, при помощи слайдера, что бы
появлялись полосы прокрутки !!!

Вот код
Код:
<?xml version="1.0" encoding="utf-8"?>
<!-- Simple example to demonstrate Form layout container. -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
				xmlns:ns1="com.flasher.*" 
				width="1200" height="850"
				creationComplete="init_app()" 
				viewSourceURL="srcview/index.html" 
				xmlns:ui="com.gnstudio.nabiro.ui.*" layout="absolute">
	
	<mx:Script>
		<![CDATA[
			import flash.net.navigateToURL;
			import com.gnstudio.nabiro.ui.images.RedEyeRemover;
			import com.gnstudio.nabiro.ui.images.Highliter;
			import mx.graphics.codec.PNGEncoder;
			import com.gnstudio.nabiro.ui.images.utils.RedEyeImageData;
			import flash.display.*;
			import flash.net.*;
			import flash.events.*;
			import flash.utils.*;
			import flash.net.*;
			import flash.geom.*;
            import mx.core.*;
			import mx.controls.*;
			import flash.display.Loader;
			
			private var fBrowser:FileReference;
			private var fFilter:FileFilter;
			private var uic01:UIComponent;
			private var uic02:UIComponent;
			private var loader:Loader;
			private var highliter:Highliter;
			private var originalImageData:ByteArray; // raw pixels in original image
			private var originalImage:ByteArray; // original image encoded as PNG
			private var bmpSelection:Bitmap;
			
			
			internal function init_app():void {
				
				fFilter = new FileFilter("Images (*.jpg, *.jpeg, *.gif, *.png)", "*.jpg;*.jpeg;*.gif;*.png");
				fBrowser = new FileReference();
				fBrowser.addEventListener(Event.SELECT, onFileSelect);
				fBrowser.addEventListener(Event.COMPLETE, onFileComplete);				
				loader = new Loader();
				highliter = new Highliter(loader);				
				uic01 = new UIComponent();
				uic01.width = imgSpiral.width;
				uic01.height = imgSpiral.height;				
				uic01.addChild(loader);
				uic01.addChild(highliter);				
				bmpSelection = new Bitmap();
				uic02 = new UIComponent();				
				uic02.addChild(bmpSelection);				
				imgSpiral.addChild(uic01);
		
			}
			
			internal function browse_for_image(evt:MouseEvent):void {
				fBrowser.browse(new Array(fFilter));
			}
			
			internal function onFileSelect(evt:Event):void {
				fBrowser.load();
			}
			
            internal function onFileComplete(evt:Event):void {
				
				if(!loader.hasEventListener(Event.COMPLETE)) {
					loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderComplete);
				}
				
				loader.loadBytes(fBrowser.data);
				btApplyFX.enabled = true;

			}
			
			internal function onLoaderComplete(evt:Event):void {
				
				var bd:BitmapData = new BitmapData(loader.width, loader.height);
				
				bd.draw(loader);
				originalImageData = bd.getPixels(new Rectangle(0, 0, loader.width, loader.height));
				originalImageData.position = 0;
				
				var png:PNGEncoder = new PNGEncoder();
				originalImage = png.encodeByteArray(originalImageData, loader.width, loader.height, true);
				originalImage.position = 0;
			}
			    
			    internal function applyFX(evt:MouseEvent):void {
				if(loader.contentLoaderInfo.hasEventListener(Event.COMPLETE))
					loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onLoaderComplete);
				
				var rect:Rectangle = highliter.rectangleSnap;
				var bd:BitmapData = new BitmapData(loader.width, loader.height);
				bd.draw(loader);
				
				var bdSelection:BitmapData = new BitmapData(rect.width, rect.height);
				var m:Matrix = new Matrix(1,0,0,1, -rect.x, -rect.y);
				var snapRect:Rectangle = new Rectangle(0, 0, rect.width, rect.height);
				
				bdSelection.draw(loader, m, null, null, snapRect, true);
				bdSelection.copyChannel(highliter.bitmapData, snapRect, new Point(0, 0), BitmapDataChannel.ALPHA, BitmapDataChannel.ALPHA);
				
				var ba:ByteArray = bdSelection.getPixels(snapRect);
				
				var reid:RedEyeImageData = new RedEyeImageData(ba, rect.width, rect.height);
				
				var adjustedBA:ByteArray = RedEyeRemover.remove_red(reid);
				bmpSelection = new Bitmap(bdSelection);
				bdSelection.setPixels(snapRect, adjustedBA);
				uic02.removeChildAt(0);
				uic02.addChild(bmpSelection);
				adjustedBA.position = 0;
				
				var fakeAlpha:BitmapData = new BitmapData(rect.width, rect.height);
				fakeAlpha.floodFill(0, 0, 0xFFFFFFFF);
				bd.copyPixels(bdSelection, snapRect, new Point(rect.x, rect.y), fakeAlpha, null, true);
				
				var newBA:ByteArray = bd.getPixels(new Rectangle(0, 0, loader.width, loader.height));
				var png:PNGEncoder = new PNGEncoder();
				var pngBA:ByteArray = png.encodeByteArray(newBA, loader.width, loader.height, true);
				loader.loadBytes(pngBA);
				highliter.clear();
				
			}	
		
	]]>
	</mx:Script>
	<mx:Panel title="Image" height="513" width="625"
			  paddingTop="10" paddingLeft="10" paddingRight="10" paddingBottom="10" x="108">	
		<mx:HBox>
			<mx:Canvas width="600" height="300" id="imgSpiral">
			</mx:Canvas>
		</mx:HBox>
			<mx:Button id="btLoadImage"
			label="browse"
			click="browse_for_image(event)"/>	
			<mx:Button id="btApplyFX"
					   enabled="false"
					   label="Red eye"
					   click="applyFX(event)"/>
			
	</mx:Panel>
</mx:Application>

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

Теги
AS3 , flex
Опции темы
Опции просмотра

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

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


 


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


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