As3 увеличить изображение - PullRequest
       36

As3 увеличить изображение

0 голосов
/ 01 апреля 2011

Я хочу создать приложение для увеличения изображения, например, следующее: Маленькое окно в маске, показывающее большую область изображения, соответствующую мышью X и Y на маленьком изображении.В Интернете существует множество примеров применения увеличительных изображений, таких как:

http://www.flashandmath.com/intermediate/magglass/mag_glass.html

Но здесь мышь и маска перемещаются с одинаковыми X и Y. Мне нужно, чтобы в маскированном окне отображалась только определенная областьсоответствующие мышью X и Y на маленьком изображении.

Любая помощь будет принята с благодарностью.спасибо.

Ответы [ 2 ]

4 голосов
/ 01 апреля 2011

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

однако, фотография и лупа, которые я не разрешаю никому использовать без предварительного запроса, пожалуйста.

enter image description here

класс позволяет вам изменять свою собственную силу увеличения, даже если вы хотите, во время выполнения. Вы можете использовать собственную графику лупы, но она также включена в исходные файлы (сначала спросите меня, хотите ли вы использовать ее в своем проекте).

Описание:

Лупа: создание настраиваемых Лупа для изображений активов

Следующий код демонстрирует решение для создания настраиваемых лупа для изображений активов с использованием Лупа класс.

Конструктор лупы получает 6 параметры. Первый loupeDisplayObject: DisplayObject Обязательный параметр является ссылкой на экранный объект, который используется в качестве виртуальная лупа В порядке для класса чтобы правильно функционировать, loupeDisplayObject: DisplayObject должен содержать круговую или эллиптическую в форме пустоты или альфа-прозрачности на его центр.

Второе изображениеURL: требуется строка параметр поставляет URLLoader's загрузить функцию URLRequest с помощью URL ресурса целевого изображения. изображение предоставляет BitmapData для обоих thumbSprite: Sprite и увеличениеSprite: объекты спрайта, которые масштабируются с использованием третьего thumbScale: номер и четвертый увеличение Масштаб: число необязательно параметры. Масштаб thumbSprite: Sprite выставлен на этап, а масштаб увеличениеSprite: виден спрайт во время увеличения.

Класс лупы работает используя события мыши для переключения видимость виртуальной лупы над имиджевый актив. Маска Спрайт: Спрайт эллипс, индексированный ниже и основанный на размер loupeDisplayObject: DisplayObject, является создан для маскировки magnificationSprite: Sprite. Тем не мение, пятая маскаWidth: номер и шестой maskHeight: число необязательных параметров можно установить вручную размер maskSprite: Sprite, который более подходит для loupeDisplayObject: DisplayObject с сложная форма.

Вызов publiclocate () функция экземпляра лупы до его аннулирования отметят это как доступный для мусора коллекция.

Класс файла:

package
{
import flash.display.Sprite;
import flash.display.DisplayObject;
import flash.display.Loader;
import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.geom.Matrix;
import flash.net.URLRequest;
import flash.ui.Mouse;
import fl.transitions.Tween;
import fl.transitions.TweenEvent;
import fl.transitions.easing.Regular;

public class Magnifier extends Sprite
    {
    //Class Variables
    private var loupeDisplayObject:DisplayObject;
    private var imageWidth:Number;
    private var imageHeight:Number;
    private var thumbScale:Number;
    private var magnificationScale:Number;
    private var maskWidth:Number;
    private var maskHeight:Number;
    private var imageBitmapData:BitmapData;
    private var maskSprite:Sprite;
    private var magnificationSprite:Sprite;
    private var thumbSprite:Sprite;
    private var loupeTween:Tween;
    private var magnificationTween:Tween;

    //Constructor
    public function Magnifier   (
                                loupeDisplayObject:DisplayObject,
                                imageURL:String,
                                thumbScale:Number = 0.5,
                                magnificationScale:Number = 1.0,
                                maskWidth:Number = NaN,
                                maskHeight:Number = NaN
                                )
        {
        this.loupeDisplayObject = loupeDisplayObject;
        this.thumbScale = Math.max(0.1, Math.min(thumbScale, 1.0));
        this.magnificationScale = Math.max(0.1, magnificationScale);
        this.maskWidth = maskWidth;
        this.maskHeight = maskHeight;

        init(imageURL);
        }

    //Load And Handle Image
    private function init(imageURL:String):void
        {
        var imageLoader:Loader = new Loader();
        imageLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
        imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageHandler);
        imageLoader.load(new URLRequest(imageURL));
        }

    private function errorHandler(evt:IOErrorEvent):void
        {
        throw(evt.text);
        }

    private function imageHandler(evt:Event):void
        {
        evt.target.removeEventListener(IOErrorEvent.IO_ERROR, errorHandler);
        evt.target.removeEventListener(Event.COMPLETE, imageHandler);

        imageWidth = evt.target.content.width;
        imageHeight = evt.target.content.height;

        imageBitmapData = new BitmapData(imageWidth, imageHeight);
        imageBitmapData.draw(evt.target.content);

        createComponents();
        }

    //Create Components
    private function createComponents():void
        {
        //Loupe Visibility
        loupeDisplayObject.alpha = 0;

        //Mask
        if (isNaN(maskWidth)) maskWidth = loupeDisplayObject.width;
        if (isNaN(maskHeight)) maskHeight = loupeDisplayObject.height;

        maskSprite = new Sprite();
        maskSprite.graphics.beginFill(0x00FF00, 0.5);
        maskSprite.graphics.drawEllipse(0, 0, maskWidth, maskHeight);
        maskSprite.graphics.endFill();
        maskSprite.mouseEnabled = false;

        //Magnification
        magnificationSprite = scaleImage(new Matrix(magnificationScale, 0, 0, magnificationScale));
        magnificationSprite.mouseEnabled = false;
        magnificationSprite.alpha = 0;
        magnificationSprite.mask = maskSprite;

        //Thumb
        thumbSprite = scaleImage(new Matrix(thumbScale, 0, 0, thumbScale));
        thumbSprite.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);

        //Add Components To The Display List
        addChild(thumbSprite);
        addChild(magnificationSprite);
        addChild(maskSprite);
        addChild(loupeDisplayObject);
        }

    private function scaleImage(matrix:Matrix):Sprite
        {
        var scaledResult:Sprite = new Sprite();
        scaledResult.graphics.beginBitmapFill(imageBitmapData, matrix, false, true);
        scaledResult.graphics.drawRect(0, 0, imageWidth * matrix.a, imageHeight * matrix.d);
        scaledResult.graphics.endFill();

        return scaledResult;
        }

    //Mouse Event Handlers
    private function mouseDownHandler(evt:MouseEvent):void
        {
        thumbSprite.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
        thumbSprite.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);
        stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);

        mouseMoveHandler(evt);
        setLoupeAsVisible(true);
        }

    private function mouseMoveHandler(evt:MouseEvent):void
        {
        loupeDisplayObject.x = evt.localX - loupeDisplayObject.width / 2;
        loupeDisplayObject.y = evt.localY - loupeDisplayObject.height / 2;

        maskSprite.x = evt.localX - maskSprite.width / 2;
        maskSprite.y = evt.localY - maskSprite.height / 2;

        magnificationSprite.x = 0 - evt.localX / thumbSprite.width * (magnificationSprite.width - thumbSprite.width);
        magnificationSprite.y = 0 - evt.localY / thumbSprite.height * (magnificationSprite.height - thumbSprite.height);
        }

    private function mouseOutHandler(evt:MouseEvent):void
        {
        thumbSprite.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler);
        setLoupeAsVisible(false);
        }

    private function mouseOverHandler(evt:MouseEvent):void
        {
        thumbSprite.removeEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler);
        setLoupeAsVisible(true);
        }

    private function mouseUpHandler(evt:MouseEvent):void
        {
        if (thumbSprite.hasEventListener(MouseEvent.MOUSE_OVER)) thumbSprite.removeEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler);

        thumbSprite.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
        thumbSprite.removeEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);
        stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);

        setLoupeAsVisible(false);
        }

    //Loupe Tween And Visibility
    private function setLoupeAsVisible(response:Boolean):void
        {
        var targetAlpha:Number;

        if  (response)
            {
            targetAlpha = 1.0;
            Mouse.hide();
            }
            else
            {
            targetAlpha = 0.0;
            Mouse.show();
            }       

        loupeTween = new Tween(loupeDisplayObject, "alpha", Regular.easeIn, loupeDisplayObject.alpha, targetAlpha, 0.25, true);
        magnificationTween = new Tween(magnificationSprite, "alpha", Regular.easeIn, magnificationSprite.alpha, targetAlpha, 0.25, true);
        }

    //Clean Up
    public function deallocate():void
        {
        thumbSprite.removeEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
        }
    }
}
0 голосов
/ 01 апреля 2011

Из первых нескольких поисков в Google "учебник по лупе as3". Вы можете легко изменить их поведение.

http://www.webwasp.co.uk/tutorials/b11-magnify/index.php

http://www.flashkit.com/tutorials/Special_Effects/Real_Tim-Boban_Kl-144/index.php

http://learnflashwithme.blogspot.com/2009/09/create-magnifying-glass-effect-in.html

...