In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

減色

image: http://www.flickr.com/photos/kazandrew2/2530872878/
Get Adobe Flash player
by shohei909 25 Jan 2011
    Embed
/**
 * Copyright shohei909 ( http://wonderfl.net/user/shohei909 )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/7D8L
 */

//image: http://www.flickr.com/photos/kazandrew2/2530872878/
package {
    import flash.geom.Rectangle;
    import flash.net.URLRequest;
    import flash.display.Bitmap;
    import flash.display.Loader;
    import flash.system.LoaderContext;
    import flash.events.Event;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        static private const IMG_URL:String = "http://assets.wonderfl.net/images/related_images/3/36/36dd/36dd20a20084587cab53c1fa78010a0945b61e99";        
        public var bitmapData:BitmapData = new BitmapData( 465, 465, false, 0 )
        public var scr:Loader = new Loader();
        function FlashTest() {
            
            scr.load( new URLRequest( IMG_URL ), new LoaderContext( true ) );
            scr.contentLoaderInfo.addEventListener( "complete", onComplete );
            addChild( new Bitmap( bitmapData ) );
        }
        public function onComplete( e:Event ):void{
            var r:Rectangle = autoSizeDraw( bitmapData, scr );
            reduceColor( bitmapData, null, r )
        }    
    }
}
import flash.geom.Point;
import flash.filters.BlurFilter;
import flash.display.BitmapData;
import flash.geom.Rectangle;
import flash.geom.Matrix;

function autoSizeDraw( bitmapData:BitmapData, sourceImage:*, rect:Rectangle=null, hAlign:int = 0, vAlign:int = 0 ):Rectangle {
    if(! rect ){ rect = bitmapData.rect; }
    var rw:int = rect.width, rh:int = rect.height, sw:int = sourceImage.width,sh:int = sourceImage.height;
    var rate:Number = rw / sw, rateH:Number = rh / sh; 
    rate = rate < rateH ? rate : rateH;
    var nw:int = sw * rate, nh:int = sh * rate+1;
    var x:int = rect.x, y:int = rect.y;
    switch( hAlign ){
        case 0: x += ( rw - nw ) >> 1; break
        case 1: x += 0; break;
        case 2: x += ( rw - nw ) >>0; break;
        default: new Error( "hArligが正しくありません。" );
    }
    switch( vAlign ){
        case 0: y += ( rh - nh ) >> 1; break;
        case 1: y += 0; break;
        case 2: y += ( rh - nh ) >> 0; break;
        default: new Error( "vArligが正しくありません。" );
    }
        
    var mtr:Matrix = new Matrix( rate, 0, 0, rate, x, y );
    bitmapData.draw( sourceImage, mtr );
    
    return new Rectangle(x,y,nw,nh);
}

function reduceColor( bitmapData:BitmapData, color:Array = null, rect:Rectangle=null ):void{
    if(! rect ){ rect = bitmapData.rect; }
    if(! color || color.length == 0 ){ color = PRIMARY_COLORS }
    bitmapData.applyFilter( bitmapData, rect, new Point(rect.x,rect.y), new BlurFilter(4,4) );
    var vec:Vector.<uint> = bitmapData.getVector( rect );
    var l:uint = vec.length;
    var cl:uint = color.length;
    Wonderfl.log( "" + cl );
    for( var i:uint = 0; i < l; i++ ){
        var c1:uint = vec[i];
        var min:uint = 0x300;
        var nc:uint = c1;
        for( var j:uint = 0; j < cl; j++ ){
            var c2:uint = color[j];
            var r:int = (c1 & 0xFF0000) - (c2 & 0xFF0000); r = r > 0 ? r : -r;
            var g:int = (c1 & 0x00FF00) - (c2 & 0x00FF00); g = g > 0 ? g : -g;
            var b:int = (c1 & 0x0000FF) - (c2 & 0x0000FF); b = b > 0 ? b : -b;
            var diff:uint = (r >> 16) + (g >> 8) + (b >> 0);
            if( min >= diff ){ min = diff; nc = c2 }
        }
        vec[i] = 0xFF000000 + nc;
    }
    bitmapData.setVector( rect, vec );
}

const SAFE_COLORS:Array = [ 0x000000,0x000033,0x000066,0x000099,0x0000CC,0x0000FF,0x003300,0x003333,0x003366,0x003399,0x0033CC,0x0033FF,0x006600,0x006633,0x006666,0x006699,0x0066CC,0x0066FF,0x009900,0x009933,0x009966,0x009999,0x0099CC,0x0099FF,0x00CC00,0x00CC33,0x00CC66,0x00CC99,0x00CCCC,0x00CCFF,0x00FF00,0x00FF33,0x00FF66,0x00FF99,0x00FFCC,0x00FFFF,0x330000,0x330033,0x330066,0x330099,0x3300CC,0x3300FF,0x333300,0x333333,0x333366,0x333399,0x3333CC,0x3333FF,0x336600,0x336633,0x336666,0x336699,0x3366CC,0x3366FF,0x339900,0x339933,0x339966,0x339999,0x3399CC,0x3399FF,0x33CC00,0x33CC33,0x33CC66,0x33CC99,0x33CCCC,0x33CCFF,0x33FF00,0x33FF33,0x33FF66,0x33FF99,0x33FFCC,0x33FFFF,0x660000,0x660033,0x660066,0x660099,0x6600CC,0x6600FF,0x663300,0x663333,0x663366,0x663399,0x6633CC,0x6633FF,0x666600,0x666633,0x666666,0x666699,0x6666CC,0x6666FF,0x669900,0x669933,0x669966,0x669999,0x6699CC,0x6699FF,0x66CC00,0x66CC33,0x66CC66,0x66CC99,0x66CCCC,0x66CCFF,0x66FF00,0x66FF33,0x66FF66,0x66FF99,0x66FFCC,0x66FFFF,0x990000,0x990033,0x990066,0x990099,0x9900CC,0x9900FF,0x993300,0x993333,0x993366,0x993399,0x9933CC,0x9933FF,0x996600,0x996633,0x996666,0x996699,0x9966CC,0x9966FF,0x999900,0x999933,0x999966,0x999999,0x9999CC,0x9999FF,0x99CC00,0x99CC33,0x99CC66,0x99CC99,0x99CCCC,0x99CCFF,0x99FF00,0x99FF33,0x99FF66,0x99FF99,0x99FFCC,0x99FFFF,0xCC0000,0xCC0033,0xCC0066,0xCC0099,0xCC00CC,0xCC00FF,0xCC3300,0xCC3333,0xCC3366,0xCC3399,0xCC33CC,0xCC33FF,0xCC6600,0xCC6633,0xCC6666,0xCC6699,0xCC66CC,0xCC66FF,0xCC9900,0xCC9933,0xCC9966,0xCC9999,0xCC99CC,0xCC99FF,0xCCCC00,0xCCCC33,0xCCCC66,0xCCCC99,0xCCCCCC,0xCCCCFF,0xCCFF00,0xCCFF33,0xCCFF66,0xCCFF99,0xCCFFCC,0xCCFFFF,0xFF0000,0xFF0033,0xFF0066,0xFF0099,0xFF00CC,0xFF00FF,0xFF3300,0xFF3333,0xFF3366,0xFF3399,0xFF33CC,0xFF33FF,0xFF6600,0xFF6633,0xFF6666,0xFF6699,0xFF66CC,0xFF66FF,0xFF9900,0xFF9933,0xFF9966,0xFF9999,0xFF99CC,0xFF99FF,0xFFCC00,0xFFCC33,0xFFCC66,0xFFCC99,0xFFCCCC,0xFFCCFF,0xFFFF00,0xFFFF33,0xFFFF66,0xFFFF99,0xFFFFCC,0xFFFFFF ]
const PRIMARY_COLORS:Array = [ 0x000000,0xEE0000,0x00EE00,0x0000EE,0xFFFF00,0xFFFFFF];