`

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

阅读更多
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会被任何一种其他的操作覆盖,要最后执行。
分享到:
评论

相关推荐

    cocos2d-x文字描边Demo

    自已对别人给的一个不完整的类,进行了封装。经过测试,可以完美的实现文字描边。

    dw文字描边效果

    dw文字描边效果 span { position:absolute; padding:4px; filter: Dropshadow(offx=1,offy=0,color=white) Dropshadow(offx=0,offy=1,color=white) Dropshadow(offx=0,offy=-1,color=white) Dropshadow(offx=-1,...

    WPF 文字描边库(继承自Label支持各种类型的文字描边)

    继承自Label的一个可支持文字描边的空间,可以添加各种炫酷效果,包括一个库和一个DEMO,文字描边方法网上比较少,研究了半天,最后是在MSDN上面找到了方案,把他发上来,可以直接用,也可以改,希望能节省大家的...

    JSFL自动描边和自动填充

    利用FLash Javascript 接口,写的一个在flash CS中使用的自动描边的命令。 可以将一个静态文本自动打散-》自动描边-》自动填充颜色,提高Flash制作效率。

    易语言GDI文字描边

    易语言GDI文字描边源码,GDI文字描边

    MoonStartMan#iOS-Swift-Problem-Record#swift给文字添加描边效果1

    swift给文字添加描边效果封装方法/// 给字体添加描边效果 : strokeWidth为正数为空心文字描边 strokeWidth为负数为实心文字描边let

    GDI文字描边.rar

    GDI文字描边.rar

    商业编程-源码-给 RGN 描边.zip

    商业编程-源码-给 RGN 描边.zip

    程序文字描边!

    是用GDI+对输入的文字重绘!描边!易语言源代码!学习GDI挺不错的!

    相册-滤镜描边.rar

    可以获取手机相册的照片,进行裁剪修改、增添滤镜、描边、添加文字等

    Cocos2d-x 2.x字体描边效果(Shader实现)

    Cocos2d-x 2.X实现的一基于CCLabelTTF + Shader的字体描边效果,具体可以参考这篇博客,http://blog.csdn.net/oktears/article/details/43200757

    HarmonyOS标准描边类图标

    资源包括30个描边类图标

    unity实现描边效果

    在unity中实现物体描边的效果,亲测可用。

    思妙FLASH2004 11

    建立画布 02-物体移动 03-淡入淡出 04-声音魔术 05-遮罩 06-引导线 07-按钮 08-颜色渐变 09-给源文件减肥 10-设置影片 11-文字处理 12-描边文字 13-按不到的按钮

    思妙FLASH2004 3

    建立画布 02-物体移动 03-淡入淡出 04-声音魔术 05-遮罩 06-引导线 07-按钮 08-颜色渐变 09-给源文件减肥 10-设置影片 11-文字处理 12-描边文字 13-按不到的按钮

    思妙FLASH2004 10

    建立画布 02-物体移动 03-淡入淡出 04-声音魔术 05-遮罩 06-引导线 07-按钮 08-颜色渐变 09-给源文件减肥 10-设置影片 11-文字处理 12-描边文字 13-按不到的按钮

    思妙FLASH2004 9

    建立画布 02-物体移动 03-淡入淡出 04-声音魔术 05-遮罩 06-引导线 07-按钮 08-颜色渐变 09-给源文件减肥 10-设置影片 11-文字处理 12-描边文字 13-按不到的按钮

    思妙FLASH2004 5

    建立画布 02-物体移动 03-淡入淡出 04-声音魔术 05-遮罩 06-引导线 07-按钮 08-颜色渐变 09-给源文件减肥 10-设置影片 11-文字处理 12-描边文字 13-按不到的按钮

    思妙FLASH2004 4

    建立画布 02-物体移动 03-淡入淡出 04-声音魔术 05-遮罩 06-引导线 07-按钮 08-颜色渐变 09-给源文件减肥 10-设置影片 11-文字处理 12-描边文字 13-按不到的按钮

Global site tag (gtag.js) - Google Analytics