首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

[转]从写类笔记-描边文字

2012-12-26 
[转]自写类笔记-描边文字http://uh.9ria.com/space-12147-do-blog-id-374.htmlpackage{ import flash.disp

[转]自写类笔记-描边文字
http://uh.9ria.com/space-12147-do-blog-id-374.html

package{ import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.Rectangle; import flash.text.TextField; import flash.text.TextFormat; public class BoundLabel extends Bitmap {  private var _text:String="";  private var _textField:TextField;  public var defaultTextFormat:TextFormat=new TextFormat();  public function BoundLabel(){   super();  }  public function get text():String{   return _text;  }  public function set text(value:String):void{   if (_text==value) return;   _text=value;   _draw();  }  public function setTextFormat(format:TextFormat,beginIndex:int=-1,endIndex:int=-1):void{   if (endIndex==-1){    endIndex=_textField.text.length;   }   _textField.setTextFormat(format,beginIndex,endIndex);   _parseText();  }  public function setBound(color:uint,beginIndex:int=-1,endIndex:int=-1):void{   _addBound(color,beginIndex,endIndex);  }  private function _parseText():void{   var _bitmapData:BitmapData;   _textField.width=_textField.textWidth+5;   _textField.height=_textField.textHeight+5;      _bitmapData=new BitmapData(_textField.width,_textField.height,true,0);   _bitmapData.draw(_textField);      if (bitmapData) bitmapData.dispose();   bitmapData=_bitmapData;  }  private function _draw():void{   _textField=new TextField();   _textField.defaultTextFormat=defaultTextFormat;   _textField.text=_text;   _parseText();  }  private function _trySetPixel32(toBitmapData_:BitmapData,i_:int,j_:int,color_:uint):void{   if (i_>=0 && j_>=0 && i_<toBitmapData_.width && j_<toBitmapData_.height && toBitmapData_.getPixel32(i_,j_)==0){    toBitmapData_.setPixel32(i_,j_,color_);   }  }  private function _addBound(color:uint,beginIndex:int=-1,endIndex:int=-1):void{   if (!bitmapData || color==0) return;      var _rect:Rectangle=new Rectangle();   if (beginIndex==-1) beginIndex=0;   if (endIndex==-1) endIndex=_textField.text.length;   for (var _i:int=beginIndex;_i<endIndex;_i++){    _rect=_rect.union(_textField.getCharBoundaries(_i));   }      var _newBitmapData:BitmapData=new BitmapData(bitmapData.width,bitmapData.height,true,0);   for (_i=0;_i<bitmapData.width;_i++){    for (var _j:int=0;_j<bitmapData.height;_j++){     if (bitmapData.getPixel32(_i,_j)!=0) {      _newBitmapData.setPixel32(_i,_j,bitmapData.getPixel32(_i,_j));            if (_rect.contains(_i,_j)){       _trySetPixel32(_newBitmapData,_i-1,_j,color);       _trySetPixel32(_newBitmapData,_i+1,_j,color);       _trySetPixel32(_newBitmapData,_i,_j-1,color);       _trySetPixel32(_newBitmapData,_i,_j+1,color);      }     }    }    }   bitmapData.dispose();   bitmapData=_newBitmapData;  } }}


//setBound会被任何一种其他的操作覆盖,要最后执行。

热点排行