Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Растрирование изображения (http://www.flasher.ru/forum/showthread.php?t=91107)

pets 24.01.2007 23:41

Растрирование изображения
 
ПРИВЕТ... Есть вопрос , если сможете помогите плиз, есть такой эффект во флеше - растеризация картинки - по типу - http://www.templatemonster.com/flash...ates/8366.html
там появляется девочка так... сначала квадратики и из них картинка, если кто знает каким образом это можно осуществить с помощью ActionScript для любой картинки объясните плизз, спасибо большое.

Llex3D 25.01.2007 02:28

Как по мне, этот эффект прорисован покадорво, специально делали такую анимацию, переходя от квадратов в растровую картинку.

pets 25.01.2007 02:35

спасибо... это очевидно, но мне и нужен эффект который бы скриптом растрировал изображения... допустим как в FireFox-е когда картинка подгружается... если кто знает как - ответьте плиз... СПАСИБО!

Ieshua 25.01.2007 04:23

bitmapData
 
Думаю с помощью bitmapData - возможно реализовать данный эффект.

pets 25.01.2007 04:45

ответ по существу...

только вот как? в этом весь вопрос...

vic_ 25.01.2007 04:54

Тормозить будет, это надо разбить на квадраты и подсчитать преобладающий цвет для каждого. Пусть не каждый пиксел, но все равно много надо перебрать, для правдоподобия. Потом отрисовать квадраты в битмапдату, увеличить количество квадратов и повторить процедуру, и это раза четыре как минимум. А потом подсунуть настоящую картинку. Решение в лоб. Может можно придумать что нибудь изящнее.

Nirth 25.01.2007 06:57

Вложений: 1
Я делал это вот так в ActionScript 3.0

class Pixilate.as
Код:

package effects
{
        import flash.events.EventDispatcher;
        import flash.events.TimerEvent;
        import flash.utils.Timer;
        import flash.display.BitmapData;
        import flash.filters.BlurFilter;
        import flash.filters.BitmapFilterQuality;
        import flash.geom.Point;
        import flash.display.Bitmap;
        import flash.geom.Rectangle;

        public class Pixilate extends EventDispatcher
        {               
                /**
                * @private
                */
                protected var _originalImage:BitmapData;
                /**
                * @private
                */
                protected var _bluredImage:BitmapData;
                /**
                * @private
                */
                protected var _currentStep:uint;
                /**
                * @private
                */
                protected var _totalSteps:uint;
               
                public function Pixilate(originalImage:BitmapData)
                {
                        _originalImage = originalImage;
                }
               
                public function get originalImage():BitmapData
                {
                        return _originalImage;
                }
               
                public function createPixelatedImage(pixelSize:uint):BitmapData
                {
                        var result:BitmapData = new BitmapData(_originalImage.width, _originalImage.height);
                       
                        var vPixelsAmmount:uint = Math.ceil(result.height/pixelSize);
                        var hPixelsAmmount:uint = Math.ceil(result.width/pixelSize);
                        var halfPixel:Number        = Math.ceil(pixelSize/2);
                       
                        for (var h:uint = 0; h < vPixelsAmmount ; h++)
                        {
                                for (var w:uint = 0; w < hPixelsAmmount ; w++)
                                {
                                        trace("drawing");
                                        var currentX:Number = w*pixelSize;
                                        var currentY:Number = h*pixelSize;
                                       
                                        var color:uint = _originalImage.getPixel32(currentX+halfPixel, currentY+halfPixel);
                                        var rect:Rectangle = new Rectangle(currentX, currentY, pixelSize, pixelSize);
                                       
                                        trace(color);
                                       
                                        result.fillRect(rect, color);
                                }
                        }
                       
                        return result;
                }
               
                /**
                * @private
                */
                protected function blurImage(blurCoof:uint):void
                {
                        var blur:BlurFilter = new BlurFilter(blurCoof, blurCoof, BitmapFilterQuality.LOW);
                        _bluredImage = new BitmapData(_originalImage.width, _originalImage.height);
                        _bluredImage.draw(_originalImage);
                        _bluredImage.applyFilter(_bluredImage, _originalImage.rect, new Point(0, 0), blur);
                }
        }
}

class PixilateExample.as
Код:

package {
        import flash.display.Sprite;
        import flash.display.Loader;
        import flash.net.URLRequest;
        import flash.events.Event;
        import flash.display.BitmapData;
        import flash.display.DisplayObject;
        import flash.display.Bitmap;
        import flash.display.LoaderInfo;
        import flash.display.StageAlign;
        import flash.display.StageScaleMode;
        import effects.Pixilate;
        import flash.utils.Timer;
        import flash.events.TimerEvent;
        import flash.events.MouseEvent;

        public class PixilateExample extends Sprite
        {
                private var pixilate:Pixilate;
                private var bitmap:Bitmap;
               
                public function PixilateExample()
                {
                        initStage();
                       
                        var loader:Loader = new Loader();
                                loader.load(new URLRequest("3.jpg"));
                                loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded);
                               
                        stage.addEventListener(MouseEvent.CLICK, startPixilate);
                }
               
                private function onImageLoaded(event:Event):void
                {                       
                        var image:DisplayObject = (event.target as LoaderInfo).loader.content;
                       
                        var bmpd:BitmapData = new BitmapData(image.width, image.height);
                                bmpd.draw(image);
                       
                        pixilate = new Pixilate(bmpd);
                        bitmap = addChild(new Bitmap()) as Bitmap;
                        bitmap.bitmapData = bmpd;
                }
               
                private function startPixilate(event:MouseEvent):void
                {
                        if(pixilate != null)
                        {
                                var timer:Timer = new Timer(20, 10);
                                        timer.addEventListener(TimerEvent.TIMER, onTimerTick);
                                        timer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
                                        timer.start();
                        }
                }
               
               
                private function onTimerTick(event:TimerEvent):void
                {
                        trace("tick");
                        bitmap.bitmapData = pixilate.createPixelatedImage((event.target as Timer).currentCount*3);
                }
               
                private function onTimerComplete(event:TimerEvent):void
                {
                       
                }
               
                private function initStage():void
                {
                        stage.align        = StageAlign.TOP_LEFT;
                        stage.scaleMode = StageScaleMode.NO_SCALE;
                }
        }
}

Вложение 16337

iNils 25.01.2007 09:19

Набросок
Код:

import flash.display.BitmapData;
import flash.geom.*;
//// сама функция
function mosaic (mcDraw:MovieClip, mcIn:MovieClip, mcOut:MovieClip, cellSize:Number) {
        cellSize = Math.floor (cellSize);
        if (cellSize > 0) {
                bmp.fillRect (bmp.rectangle, 0x00000000);
                mcOut._xscale = mcOut._yscale = 100;
                mcIn._xscale = mcIn._yscale = 100 / cellSize;
                bmp.draw (mcDraw);
                mcOut._xscale = mcOut._yscale = 100 * cellSize;
                mcIn._xscale = mcIn._yscale = 100;
        }
}
//// объекты
var bmp:BitmapData = new BitmapData (200, 200, true, 0x0);
var mc:MovieClip = this.createEmptyMovieClip ("mc", this.getNextHighestDepth ());
var mcImage:MovieClip = this.createEmptyMovieClip ("mcI", this.getNextHighestDepth ());
var mcGradient:MovieClip = mcImage.createEmptyMovieClip ("mc", 0);
//// вспомогательная ерунда
mc.attachBitmap (bmp, 0);
mcI._x = mcI._y = 100;
mc._x = 400;
mc._y = 100;
with (mcGradient) {
        colors = [0x000000, 0xFF0000];
        fillType = "linear";
        alphas = [100, 100];
        ratios = [0, 0xFF];
        matrix = new Matrix ();
        matrix.createGradientBox (200, 200, Math.PI / 4, 0, 0);
        beginGradientFill (fillType, colors, alphas, ratios, matrix);
        moveTo (0, 0);
        lineTo (0, 200);
        lineTo (200, 200);
        lineTo (200, 0);
        lineTo (0, 0);
        endFill ();
}
//// вызываем функцию
var cx:Number = 1;
setInterval(function () {
        mosaic (mcImage, mcGradient, mc, cx++);
}, 500);
mosaic (mcImage, mcGradient, mc, cx++);


_sestra_ 25.01.2007 11:38

Pixel.fla
 
Вложений: 1
Пользовался этим неоднократно, как помне удобно.


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

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