白黒化した画像の明度を判別して0〜9のビットマップフォントを割り振ってます。
フォントの密度がいい感じにばらけてないとグラデーションが綺麗に出ないのが気になるところ。
//画像ロードコンプリート時
private function onComplete( e:Event ):void{
...
var m:Matrix = new Matrix();
//読み込んだBitmapDataを縮小しておく
m.scale( 1/W, 1/H);
_source = new BitmapData( _bmpd.width/W, _bmpd.height/H, false, 0x0);
_source.draw( _bmpd, m);
//白黒化してRGBそれぞれを同じ値にする
_source.applyFilter( _source, _source.rect, point, new ColorMatrixFilter([ 0.3, 0.59, 0.11, 0, 0, 0.3, 0.59, 0.11, 0, 0, 0.3, 0.59, 0.11, 0, 0, 0, 0, 0, 1, 0]) );
_canvas = new BitmapData( _source.width*W, _source.height*H, false, 0xFFFFFF);
...
}
//明度の判別
private function brightness( p:Point ):uint{
//指定したピクセルのB値(RもGも一緒)を取得
var c:uint = _source.getPixel( p.x, p.y) & 0xFF;
//この場合は0〜9に割り振る
return Math.floor( c/(25.6) );
}
全体のコードはwonderflで。