Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Как сделать zoom компонента <mx:Canvas> ?! (http://www.flasher.ru/forum/showthread.php?t=153329)

Sergii 31.03.2011 23:40

Как сделать 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, время: 21:34.

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