Flash技巧教程:as3把2D图片分析成文本文本功能

时间:2013-04-03 13:12:30 浏览次数:
一篇在游戏开发中常用到的功能就是利用as3把2D图片分析成文本文本功能,下面我们来看看具体的操作过程与as实现代码吧。
对于一个像素的任意点,可以得到他的灰度。灰度计算公式
  • getR(color) * 0.299 + getG(color) * 0.587 + getB(color) * 0.114; 
     

ag电子:  以重庆市为例,记者从重庆市国资委获悉,目前重庆市正在制定《市属国有重点企业投资监督管理办法》,梳理建立了重庆市国有资产监督管理“权力清单”和“责任清单”,按照程序审批后近期将公布。

而每一个文字也有其对应的明暗,比如实心的一个球,就要比空心的显得更暗,因为它更加的紧密,求文字明暗的方法

private function getDensity(t:String):Number { 
            var ttf:TextField = new TextField; 
            ttf.autoSize = TextFieldAutoSize.LEFT; 
            ttf.text = t; 
  
 
            var bmd:BitmapData = new BitmapData(ttf.width, ttf.height, false, 0xffffff); 
            bmd.draw(ttf); 
            var c:int = 0; 
            for (var x:int = 0; x < bmd.width;x++ ) { 
                for (var y:int = 0; y < bmd.height;y++ ) { 
                    if (bmd.getPixel(x,y)!=0xffffff) { 
                        c++; 
                    } 
                } 
            } 
            return c / ttf.width / ttf.height; 
        }

完整代码

package
 
{ 
    import flash.display.Bitmap; 
    import flash.display.BitmapData; 
    import flash.display.Loader; 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.geom.Rectangle; 
    import flash.net.FileReference; 
    import flash.text.TextField; 
    import flash.text.TextFieldAutoSize; 
    import flash.text.TextFormat; 
    import sliz.miniui.Button; 
    import sliz.utils.UIUtils; 
    /** 
     * ... 
     * @author lizhi 
     */
 
    public class TestText extends Sprite 
    { 
        private var fonts:Array = []; 
        private var tf:TextField; 
  
 
        private var file:FileReference; 
        private var loader:Loader; 
        public function TestText() 
        { 
            tf = new TextField; 
            var tfm:TextFormat = new TextFormat; 
            tfm.size = 10; 
            tfm.leading = -2; 
            tf.defaultTextFormat = tfm; 
            tf.autoSize = TextFieldAutoSize.LEFT; 
            var text:String = " "; 
            var min:int = 32; 
            var max:int = 120; 
            while (++min < max) { 
                var c:String = String.fromCharCode(min); 
                text += c; 
            } 
            text += "           .'"*#@%+-)(TiI?><~"; 
            for (var i:int = 0; i < text.length;i++ ) { 
                c = text.charAt(i); 
                fonts.push({d:getDensity(c),t:c}); 
            } 
            fonts.sortOn("d", Array.NUMERIC|Array.DESCENDING); 
  
 
            //[Embed(source = '123.png')]var ic:Class; 
            //var bmd:BitmapData = (new ic as Bitmap).bitmapData; 
            //render(bmd); 
            addChild(tf); 
  
 
            UIUtils.changeStage(stage); 
  
 
            var explorer:Button = new Button("explorer image", 2, 20, this, browse); 
  
 
            loader = new Loader(); 
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoad2); 
        } 
  
 
        private function render(bmd:BitmapData):void { 
            tf.width = 1000; 
            tf.height = 1000; 
            var x:int = 0; 
            var y:int = 0; 
            tf.text = ""; 
            while (y < bmd.height) { 
                while (x<bmd.width) { 
                    var gray:Number = getGray(bmd.getPixel(x, y)) / 0xff; 
                    var index:int = int((fonts.length - 1) * gray); 
                    tf.appendText(fonts[index].t); 
                    var r:Rectangle = tf.getCharBoundaries(tf.text.length - 1); 
                    x += r.width; 
                } 
                tf.appendText("n"); 
                y = r.bottom 
                x = 0; 
            } 
        } 
  
 
        private function getDensity(t:String):Number { 
            var ttf:TextField = new TextField; 
            ttf.autoSize = TextFieldAutoSize.LEFT; 
            ttf.text = t; 
  
 
            var bmd:BitmapData = new BitmapData(ttf.width, ttf.height, false, 0xffffff); 
            bmd.draw(ttf); 
            var c:int = 0; 
            for (var x:int = 0; x < bmd.width;x++ ) { 
                for (var y:int = 0; y < bmd.height;y++ ) { 
                    if (bmd.getPixel(x,y)!=0xffffff) { 
                        c++; 
                    } 
                } 
            } 
            return c / ttf.width / ttf.height; 
        } 
  
 
        private function getR(color:uint):uint { 
            return color << 8 >>> 24; 
        } 
        private function getG(color:uint):uint { 
            return color << 16 >>> 24; 
        } 
        private function getB(color:uint):uint { 
            return color << 24 >>> 24; 
        } 
        private function getGray(color:uint):uint { 
            return getR(color) * 0.299 + getG(color) * 0.587 + getB(color) * 0.114; 
        } 
  
 
        private function browse(e:Event):void { 
            file = new FileReference(); 
            file.browse(); 
            file.addEventListener(Event.SELECT, onSelect); 
        } 
  
 
        private function onSelect(e:Event):void { 
            file.load(); 
            file.addEventListener(Event.COMPLETE, onLoad); 
        } 
  
 
        private function onLoad(e:Event):void { 
  
 
            loader.loadBytes(file.data); 
  
 
        } 
  
 
        private function onLoad2(e:Event):void { 
            var content:Bitmap = loader.contentLoaderInfo.content as Bitmap; 
            render(content.bitmapData); 
        } 
    } 
  
 
}


合作: 老虎机游戏 线上牛牛 ag电子