Created
August 9, 2012 10:04
-
-
Save wwwins/3302876 to your computer and use it in GitHub Desktop.
mosaic or pixel effect
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package | |
| { | |
| import flash.display.Bitmap; | |
| import flash.display.Sprite; | |
| import flash.events.Event; | |
| public class Main extends Sprite | |
| { | |
| static public const PIXEL_SIZE:uint = 10; | |
| [Embed(source = "../assets/orig.jpg")] | |
| private var ImageClass:Class; | |
| private var img:Bitmap = new ImageClass(); | |
| private var _myMosaic:Mosaic; | |
| public function Main():void | |
| { | |
| if (stage) init(); | |
| else addEventListener(Event.ADDED_TO_STAGE, init); | |
| } | |
| private function init(e:Event = null):void | |
| { | |
| removeEventListener(Event.ADDED_TO_STAGE, init); | |
| // entry point | |
| // 10x10 馬賽克 | |
| _myMosaic = new Mosaic(img, PIXEL_SIZE, true); | |
| addChild(_myMosaic); | |
| } | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package | |
| { | |
| import flash.display.Sprite; | |
| import flash.display.Shape; | |
| import flash.display.DisplayObject; | |
| import flash.display.BitmapData; | |
| import flash.display.Bitmap; | |
| import flash.geom.Point; | |
| import flash.geom.Rectangle; | |
| import flash.utils.getTimer; | |
| public class Mosaic extends Sprite | |
| { | |
| public var bmd:BitmapData; | |
| public var pixelSize:uint; | |
| public var totalTime:uint = 0; | |
| public var startRender:Boolean; | |
| private var _canvas:BitmapData; | |
| public function Mosaic(srcDispObj:DisplayObject, _pixelSize:uint = 0, _startRender:Boolean = true) | |
| { | |
| this.pixelSize = _pixelSize; | |
| this.startRender = _startRender; | |
| bmd = new BitmapData(srcDispObj.width, srcDispObj.height); | |
| bmd.draw(srcDispObj); | |
| if (pixelSize != 0 && startRender) | |
| { | |
| _canvas = new BitmapData(srcDispObj.width, srcDispObj.height, false, 0xFFFFFF); | |
| render(); | |
| } | |
| } | |
| public function render():void | |
| { | |
| var startTime:uint = getTimer(); | |
| var renderContainer:Sprite = new Sprite(); | |
| var rec:Rectangle = new Rectangle(0, 0, pixelSize, pixelSize); | |
| var ySteps:uint = Math.round(bmd.height / pixelSize); | |
| var xSteps:uint = Math.round(bmd.width / pixelSize); | |
| for (var i:uint = 0; i <= ySteps; i++) | |
| { | |
| var colorY:uint; | |
| if (i == ySteps) | |
| { | |
| colorY = pixelSize * (i - 1); | |
| } | |
| else | |
| { | |
| colorY = pixelSize * (i); | |
| } | |
| for (var j:uint = 0; j <= xSteps; j++) | |
| { | |
| var colorX:uint; | |
| if (j == xSteps) | |
| { | |
| colorX = pixelSize * (j - 1); | |
| } | |
| else | |
| { | |
| colorX = pixelSize * (j); | |
| } | |
| // 取得顏色 | |
| var color:uint = bmd.getPixel(colorX, colorY); | |
| rec.x = colorX | |
| rec.y = colorY | |
| // 填入顏色方塊 | |
| //_canvas.copyPixels(bmd, rec, new Point(colorX, colorY));//slow | |
| _canvas.fillRect(rec, color); | |
| } | |
| } | |
| addChild(new Bitmap(_canvas)); | |
| var rendTime:uint = getTimer() - startTime; | |
| totalTime += rendTime; | |
| trace("pixel size:", pixelSize, "pixel num:", ySteps * xSteps, "render time:", rendTime, "total time:", totalTime); | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment