減色
image: http://www.flickr.com/photos/kazandrew2/2530872878/
/**
* 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];