forked from: flash on 2011-6-4

by tsu_droid forked from 文字のエッジ検出 (diff: 2)
いつものように日本語テスト
♥0 | Line 60 | Modified 2011-06-05 01:21:57 | MIT License
play

ActionScript3 source code

/**
 * Copyright tsu_droid ( http://wonderfl.net/user/tsu_droid )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/qvlv
 */

// forked from bach's flash on 2011-6-4
package {
    import flash.filters.ColorMatrixFilter;
    import flash.text.AntiAliasType;
    import flash.filters.ConvolutionFilter;
    import flash.geom.Point;
    import flash.geom.Rectangle;
    import flash.text.TextFieldType;
    import flash.text.TextFieldAutoSize;
    import flash.text.TextFormat;
    import flash.display.Bitmap;
    import flash.geom.Matrix;
    import flash.display.BitmapData;
    import flash.text.TextField;
    import flash.events.Event;
    import flash.display.Sprite;
    
    public class Main extends Sprite {
        public function Main():void {
            addEventListener(Event.ADDED_TO_STAGE, init);
        }
        
        private function init(e:Event):void {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            
            //元となるテキスト
            var textFormat:TextFormat = new TextFormat();
            textFormat.size = 150;
            textFormat.color = 0x88aaff;
            var textField:TextField = new TextField();
            textField.defaultTextFormat = textFormat;
            textField.autoSize = TextFieldAutoSize.LEFT;
            textField.antiAliasType = AntiAliasType.NORMAL;
            textField.text = "@水無月";
            addChild(textField);
            
            //キャンバスの生成
            var canvas:BitmapData = new BitmapData(textField.width, textField.height);
            canvas.draw(textField);
            var rectAngle:Rectangle = new Rectangle(0, 0, canvas.width, canvas.height);
            var point:Point = new Point(0, 0);
            
            //グレースケール
            var grayScaleMatrix:Array = [
                1/3, 1/3, 1/3, 0,   0,
                1/3, 1/3, 1/3, 0,   0,
                1/3, 1/3, 1/3, 0,   0,
                0,   0,   0,   255, 0
            ];
            var grayScaleFilter:ColorMatrixFilter = new ColorMatrixFilter(grayScaleMatrix);
            canvas.applyFilter(canvas, rectAngle, point, grayScaleFilter);
            
            //2値化
            canvas.threshold(canvas, rectAngle, point, "<", 0x00ffffff, 0xff000000, 255, false);
            
            //エッジ検出
            var laplacianMatrix:Array = [
                -1, -1, -1,
                -1, +8, -1,
                -1, -1, -1
            ];
            var laplacianFilter:ConvolutionFilter = new ConvolutionFilter(3, 3, laplacianMatrix);
            canvas.applyFilter(canvas, rectAngle, point, laplacianFilter);
            
            //ネガポジ反転
                -1, 0, 0, 0, 255,
                0, -1, 0, 0, 255,
                0,  0, -1, 0, 255,
                0,  0,  0, 255, 0
            
            //キャンバスを表示
            var bitmap:Bitmap = new Bitmap(canvas);
            bitmap.y = stage.stageHeight / 2;
            addChild(bitmap);
        }
    }
}