相关推荐
2010年12月07日
因为矢量图的表现力毕竟有限,因此我们经常需要使用外部的图片来显示文字等信息,最多的情况就是显示数字和字母。
但是,如果将每个数字或者字母做成一个图片,在程序运行过程中,就要载入许多的小文件,这样出错的几率就会变大,而且也会影响网络性能。因此,我写了两个类来处理这种情况。
例如:要使用0-9的数字图片,可以将0-9拼在一张长条形的图片中,载入后使用BMPSlicer来切割,切割后,就可以使用BMPText来显示它。
下图就是被切割的图片:
package { import flash.display.Bitmap; import flash.display.Sprite; import flash.events.Event; import flash.events.TimerEvent; import flash.utils.Timer; import org.zengrong.display.BMPText; [SWF(width=200,height=100,backgroundColor=0xCCCCCC )] public class BMPTextTest extends Sprite { public function BMPTextTest() { _bmpText = new BMPText('0123456789', 46, 52, true, Bitmap(new _timerClass()).bitmapData); _bmpText.gap = -10; addChild(_bmpText); _timer = new Timer(100, 99999); _timer.addEventListener(TimerEvent.TIMER, handler_timer); _timer.start(); this.addEventListener(Event.ADDED_TO_STAGE, handler_addToStage); } [Embed(source="timer.png")] private static var _timerClass:Class; private var _bmpText:BMPText; private var _timer:Timer; private function handler_addToStage(evt:Event=null):void { _bmpText.x = stage.stageWidth/2 - _bmpText.width/2; _bmpText.y = stage.stageHeight/2 - _bmpText.height/2; } private function handler_timer(evt:TimerEvent):void { _bmpText.text = _timer.currentCount.toString(); handler_addToStage(); } } }
////////////////////////////////////////////////// ////////////////////////////// // // zengrong.net // 创建者: zrong // 最后更新时间:2010-12-07 // ////////////////////////////////////////////////// ////////////////////////////// package org.zengrong.display { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.DisplayObject; import flash.display.Sprite; /** * 用位图拼成文字形式用于显示 * @author zrong */ public class BMPText extends Sprite { /** * 设置所有能显示的字符范围,以及提供代替字符显示用的BitmapData数据。 * @param $allText 所有能显示的字符串 * @param $width 字符图片的宽度 * @param $height 字符图片的高度 * @param $transparent 字符图片是否支持透明 * @param $bmds 字符图片数据,可以为一个或多个。
* 每个参数都必须是BitmapData类型。
* 如果提供的字符图片数据小于$allText的字符数量,则仅使用第一个BitmapData进行切割。
* 否则按照提供的参数的数据与$allText字符串中的字符进行对应。 */ public function BMPText($allText:String='', $width:int=-1, $height:int=-1, $transparent:Boolean=false, $direction:String='horizontal', ...$bmds:Array) { if($allText && $width>0 && $height>0 && $bmds.length>0) { var __args:Array = [$allText, $width, $height, $transparent, $direction]; setBMPAndText.apply(this, __args.concat($bmds)); } } private var _text:String; //当前正在显示的字符 private var _allText:String; //支持显示的所有字符 private var _gap:int = 0; //文字间距 private var _allTextLength:int; //支持显示的所有字符的数量 private var _bmpWidth:int; //一个文字位图的宽度 private var _bmpHeight:int; //一个文字位图的高度 private var _transparent:Boolean; //是否透明 private var _direction:String; //切割方向 private var _slice:BMPSlicer; //用来对长的位图进行切片 private var _bmdList:Vector.; //支持显示的所有字符对应的BitmapData列表 private var _textIndex:Object; //保存每个文字的索引 //------------------------------------------------ -------------------------- // // 公有方法 // //------------------------------------------------ -------------------------- //---------------------------------- // getter方法 //---------------------------------- /** * 获取当前正在显示的字符串。 */ public function get text():String { return _text; } /** * 获取允许显示的所有字符串。 */ public function get allText():String { return _allText; } public function get gap():int { return _gap; } //---------------------------------- // setter方法 //---------------------------------- /** * 设置文本位图之间的间隔。 * @param $gap 文本位图之间的间隔。 */ public function set gap($gap:int):void { _gap = $gap; var __child:int = numChildren; for(var i:int=0; i 0) __dis.x += i*_gap; } } /** * 设置显示的文本。 * @param $text 要显示的文本。 * @throw RangeError 如果参数中的文本中有字符不在允许字符的范围内,就会抛出此异常。 */ public function set text($text:String):void { while(numChildren>0) removeChildAt(0); if(!_allText || !_bmdList) return; _text = $text; var __length:int = _text.length; for(var i:int=0; i 0) __bmp.x += i*_gap; addChild(__bmp); } } /** * @copy BMPText#BMPText() */ public function setBMPAndText($allText:String, $width:int, $height:int, $transparent:Boolean, $direction:String, ...$bmds:Array):void { if($allText.length (_allTextLength, true); for(var j:int=0; j0) && (_height>0)) slice(); } //------------------------------------------------ -------------------------- // // 实例变量 // //------------------------------------------------ -------------------------- protected var _bmd:BitmapData; protected var _width:int; protected var _height:int; protected var _transparent:Boolean; protected var _direction:String; protected var _length:int; /** * 保存切割好的BitmapData */ protected var _bmdList:Vector.; //------------------------------------------------ -------------------------- // // getter方法 // //------------------------------------------------ -------------------------- /** * 返回切割好的BitmapData * @throw ReferenceError 如果没有执行过slice方法,就会抛出此异常。 * @see #slice() */ public function get slicedBitmapDataList():Vector. { if(!_bmdList) throw new ReferenceError('切片列表还没有定义!请先执行BMPSlicer.slice方法。'); return _bmdList; } /** * 根据索引返回要被切成片的BitmapData * @param $index 切片在切片列表中的索引,从0开始 */ public function getSlice($index:int):BitmapData { return _bmdList[$index]; } /** * 根据索引返回被切成片的位图数据,并包装成Bitmap显示对象 * @param $index 切片在切片列表中的索引,从0开始 */ public function getSlicedBMP($index:int):Bitmap { return new Bitmap(getSlice($index)); } //------------------------------------------------ -------------------------- // // setter方法 // //------------------------------------------------ -------------------------- public function set bitmapData($bmd:BitmapData):void { _bmd = $bmd; } public function set width($width:int):void { _width = $width; } public function set height($height:int):void { _height = $height; } public function set transparent($transparent:Boolean):void { _transparent = $transparent; } public function set direction($direction:String):void { _direction = $direction; } public function set length($length:int):void { _length = $length; } //------------------------------------------------ -------------------------- // // 方法 // //------------------------------------------------ -------------------------- /** * 执行切片动作 * @throw ReferenceError 如果必要的属性没有定义,就会抛出异常。 */ public function slice():void { if(!_bmd) throw new ReferenceError(ERROR_MSG_BITMAPDATA); if(_width ReferenceError(ERROR_MSG_WIDTH); if(_height ReferenceError(ERROR_MSG_HEIGHT); //如果没有传递$length值,就根据位图的宽度计算 if(_length (_length, true); var __rect:Rectangle = new Rectangle(0, 0, _width, _height); var __pt:Point = new Point(0, 0); //新建一个BitmapData for(var i:int=0; i<_length; i++) { var __newBmd:BitmapData = new BitmapData(_width, _height, _transparent); if(_direction == HORIZONTAL) __rect.x= i * _width; else __rect.y = i * _height; __newBmd.copyPixels(_bmd, __rect, __pt); _bmdList[i] = __newBmd; } } } }
发表评论
-
il中间语言-张银-博客园
2012-01-20 11:34 866il中间语言-张银-博客园 2012年01月14日 一、 ... -
2011年安徽省公务员考试行测真题(3)
2012-01-20 11:34 6812011年安徽省公务员考试 ... -
数学 3,4
2012-01-20 11:34 737数学 3,4 17小时前 2012届同心圆梦专题卷数 ... -
2010-07-26
2012-01-19 16:25 6172010-07-26 2010年07月26日 最近不少网 ... -
Flash CS5 用户自定义Button组件
2012-01-19 16:25 1037Flash CS5 用户自定义Button组件 2010年1 ... -
javascript try catch捕获异常
2012-01-19 16:25 973javascript try catch捕获异常 2011年 ... -
怎么将javascript异常信息输出
2012-01-19 16:25 710怎么将javascript异常信息 ... -
小学生评语
2012-01-17 06:09 591小学生评语 2011年01月18日 陈柳柳:想到你,浮现 ... -
也谈小学作文教学策略
2012-01-17 06:09 613也谈小学作文教学策略 2011年05月28日 也谈小学作 ... -
改革作文评估方法,解放小学语文教师
2012-01-17 06:09 610改革作文评估方法,解放小学语文教师 2010年07月13日 ... -
提高小学作文实效性的思考
2012-01-17 06:09 624提高小学作文实效性的思考 2010年11月17日 摘要: ... -
小学二年级操行评语1
2012-01-17 06:09 787小学二年级操行评语1 2 ... -
神马都是浮云
2012-01-16 04:50 549神马都是浮云 2011年02月20日 曾以为爱情最为坚定 ... -
神马都是浮云,但也要用心去活!
2012-01-16 04:50 553神马都是浮云,但也要用心去活! 2012年01月11日 ... -
神马爱情?全是浮云
2012-01-16 04:50 575神马爱情?全是浮云 2011年12月24日 神马爱情、你 ... -
神马爱上了浮云。
2012-01-16 04:50 598神马爱上了浮云。 2012 ... -
神马都是浮云
2012-01-16 04:50 544神马都是浮云 2012年01月14日 ...
相关推荐
人工智能-项目实践-检测-一个基于 fasttext + faiss 的商品内容相关推荐实现,nginx+uwsgi+flask gunicorn+uvicorn+fastapi 提供api查询接口,增加Spark实现 Ansj+Word2vec+LSH+Phoenix recsys_faiss 一个基于 ...
论文基于图的相关推荐算法
垃圾分类相关推荐.pdf
1、资源内容:一个基于 fasttext + faiss 的商品内容相关推荐实现+源代码+文档说明 2、代码特点:内含运行结果,不会运行可私信,参数化编程、参数可方便更改、代码编程思路清晰、注释明细,都经过测试运行成功,...
目录 一、 产品概述 ...网易新闻: 点击不喜欢后,刷新首页相关推荐的新闻减少,但仍有出现 点击屏蔽相关关键词,并非完全屏蔽,只是减少推荐,下一刷仍会出现相关内容 今日头条: 点击不感兴趣后,刷新首页推荐
该压缩文件包括,从零开始搭建音乐推荐系统 模型构建与算法调参(建模与评估方法) 基于movielens数据集的推荐预测 基于网易云音乐数据的推荐预测 word2vec 和Song2vec实现 冷启动与用户兴趣预测问题 基于...
各种常见布局CSS实现,知名网站布局分析,相关阅读推荐
相关推荐常以“相关推荐”、“看了还看”等形式出现,一般放在内容详情页;热门推荐则是根据物品的热度进行推荐,常以排行榜等形式出现。 推荐系统的主要价值在于帮助用户快速筛选出感兴趣的内容,满足用户的个性化...
推荐系统 推荐系统笔记,包括论文,代码实现,相关推荐比赛等
相关推荐:相关推荐有点类似于关联规则的个性化推荐,就是在你阅读⼀个内容的时候,会提⽰你阅读与此相关的内容。 个性化推荐:基于⽤户的历史⾏为做出的内容推荐。也是本⽂主要讲述的内容。 其中,前三者是和机器...
就社会标签系统中的个性化推荐算法进行了研究,提出一种基于万有引力和随机游走的个性化推荐算法。针对现有推荐算法缺乏物理学解释和单纯依靠用户...实验结果说明此算法较其他的相关推荐算法可以获得更高的推荐性能。
3. **相关推荐**:根据当前正在观看的电影类型,推荐收藏量较高的类似电影,同样会排除用户已经收藏过的电影。 4. **数据来源**:系统使用的是由GroupLens项目组从美国著名电影网站MovieLens整理的数据集,其中包含...
本系统的设计工作主要是使用了Java编 程语言, MYSQL数据库,框架是Spring Boot。而前端设计则使用了较新的Vue.js。本 设计完成了对用户登录功能...内容在知识图谱中的实体与关系,并且接收到协同过滤算法的相关推荐。
软件相关专业书籍推荐 软件相关专业书籍推荐 软件相关专业书籍推荐
豆瓣电影推荐系统——通过爬取电影数据和用户数据,再利用所爬取的数据设计并实现相关推荐算法对用户进行电影推荐。然后设计出图形用户界面(GUI)进行交互,封装成电影推荐软件,针对数据集中的用户推荐相关电影。 ...
通过MATLAB的编制来完成一个基于协同过滤算法的影视相关推荐以及影视点播的排行。其中协同过滤算法之中需要运用到一定的相似度计算函数最好能使用Eulid距离,cosine 或者皮尔逊函相关系数等,如果您有更好的函数方法...
关键技术与难点分析3.1 推荐系统简介3.2 相关推荐算法3.2.1 基于用户推荐3.2.2 基于项目推荐3.3 系统关键问题及解决方案3.3.1 冷启动问题3.3.2 数据稀疏性问题3.3.3 数据缺失问题第四章 系统总体设计4.1 系统设计...
Java_相关优秀书籍推荐 Java_相关优秀书籍推荐 Java_相关优秀书籍推荐 Java_相关优秀书籍推荐
coursera algorithm推荐参考书,包含数据结和算法,适合初学者