Skip to content

Instantly share code, notes, and snippets.

@wwwins
Created August 9, 2012 10:04
Show Gist options
  • Select an option

  • Save wwwins/3302876 to your computer and use it in GitHub Desktop.

Select an option

Save wwwins/3302876 to your computer and use it in GitHub Desktop.
mosaic or pixel effect
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);
}
}
}
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