相关推荐
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 899il中间语言-张银-博客园 2012年01月14日 一、 ... -
2011年安徽省公务员考试行测真题(3)
2012-01-20 11:34 6972011年安徽省公务员考试 ... -
数学 3,4
2012-01-20 11:34 759数学 3,4 17小时前 2012届同心圆梦专题卷数 ... -
2010-07-26
2012-01-19 16:25 6312010-07-26 2010年07月26日 最近不少网 ... -
Flash CS5 用户自定义Button组件
2012-01-19 16:25 1055Flash CS5 用户自定义Button组件 2010年1 ... -
javascript try catch捕获异常
2012-01-19 16:25 991javascript try catch捕获异常 2011年 ... -
怎么将javascript异常信息输出
2012-01-19 16:25 721怎么将javascript异常信息 ... -
小学生评语
2012-01-17 06:09 606小学生评语 2011年01月18日 陈柳柳:想到你,浮现 ... -
也谈小学作文教学策略
2012-01-17 06:09 626也谈小学作文教学策略 2011年05月28日 也谈小学作 ... -
改革作文评估方法,解放小学语文教师
2012-01-17 06:09 623改革作文评估方法,解放小学语文教师 2010年07月13日 ... -
提高小学作文实效性的思考
2012-01-17 06:09 636提高小学作文实效性的思考 2010年11月17日 摘要: ... -
小学二年级操行评语1
2012-01-17 06:09 799小学二年级操行评语1 2 ... -
神马都是浮云
2012-01-16 04:50 557神马都是浮云 2011年02月20日 曾以为爱情最为坚定 ... -
神马都是浮云,但也要用心去活!
2012-01-16 04:50 571神马都是浮云,但也要用心去活! 2012年01月11日 ... -
神马爱情?全是浮云
2012-01-16 04:50 592神马爱情?全是浮云 2011年12月24日 神马爱情、你 ... -
神马爱上了浮云。
2012-01-16 04:50 612神马爱上了浮云。 2012 ... -
神马都是浮云
2012-01-16 04:50 565神马都是浮云 2012年01月14日 ...
相关推荐
《基于图的相关推荐算法》这篇论文深入探讨了在信息爆炸时代如何有效地利用用户行为数据进行个性化推荐。推荐系统已经成为现代互联网服务中不可或缺的一部分,旨在帮助用户发现他们可能感兴趣但尚未发现的信息或产品...
人工智能-项目实践-检测-一个基于 fasttext + faiss 的商品内容相关推荐实现,nginx+uwsgi+flask gunicorn+uvicorn+fastapi 提供api查询接口,增加Spark实现 Ansj+Word2vec+LSH+Phoenix recsys_faiss 一个基于 ...
基于java实现的智慧医疗系统,包括疾病搜索、相关推荐、疾病医疗问答以及智能疾病诊断等功能+源码+项目解析,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 项目...
【资讯类相关推荐竞品分析】 在移动互联网时代,资讯类应用已经成为用户获取信息的重要渠道。本文将对两款主流的资讯应用——网易新闻和今日头条进行深入的竞品分析,主要关注产品功能、推荐内容体验、互动评估、...
该压缩文件包括,从零开始搭建音乐推荐系统 模型构建与算法调参(建模与评估方法) 基于movielens数据集的推荐预测 基于网易云音乐数据的推荐预测 word2vec 和Song2vec实现 冷启动与用户兴趣预测问题 基于...
而“推豆儿”可能是该模块的特定实现或者插件名称,它可能提供了更具体的相关推荐算法或者流量交易机制,具体细节需根据实际使用和文档来了解。 通过深入理解和巧妙运用这些模块,Discuz! X2.5 的站点不仅能够保持...
相关推荐常以“相关推荐”、“看了还看”等形式出现,一般放在内容详情页;热门推荐则是根据物品的热度进行推荐,常以排行榜等形式出现。 推荐系统的主要价值在于帮助用户快速筛选出感兴趣的内容,满足用户的个性化...
淘宝推荐系统应用场景:淘宝推荐系统广泛应用于商品推荐、店铺推荐、个性化推荐列表、相关推荐、热门排行榜等场景,这些产品覆盖用户在淘宝的购物全过程,满足不同用户群体的需求。 淘宝推荐系统核心算法:淘宝推荐...
推荐系统主要有个性化推荐、相关推荐和热门推荐等形式,其中个性化推荐尤其重要,它能显著提升用户转化率,如亚马逊、YouTube和LinkedIn等公司都从中受益。个性化推荐系统通过快速响应用户反馈,确保推荐内容的时效...
【标题】:“足球推荐网站源代码”通常是指用于构建一个在线平台的编程代码,这个平台主要功能是提供足球比赛的相关推荐、实时比分以及赔率信息。这类源代码可能包括前端用户界面、后端数据处理、数据库连接、推荐...
文章中提到的移动3D GIS架构允许推荐系统通过3D地图界面为用户提供实时的位置相关推荐。这对于旅游推荐系统来说是一个重要的创新,因为这种系统可以为用户创造一种身临其境的体验,使得用户在规划旅游时能够更加直观...
此外,还有基于隐语义模型的推荐,如LSA和LDA,它们利用自然语言处理技术理解用户的需求和偏好,提供相关推荐。 针对数据稀疏性问题,聚类推荐算法如K-Means、BIRCH和DBSCAN被用来改善相似度计算的准确性,通过聚类...
热门推荐基于大众选择,人工推荐结合专业判断,相关推荐基于内容关联,个性化推荐则依据用户历史行为进行定制。在实际应用中,前三者通常是推荐的主体,约占80%,而个性化推荐用于补充长尾内容,约占20%。 推荐系统...
在实际应用中,推荐系统通常采用多种推荐形式,如历史购买记录推荐、购物车或收藏夹中的相似商品推荐,以及基于用户历史信息的相关推荐。个性化推荐系统能深度挖掘用户兴趣,增强购买意愿,维持客户忠诚度,解决电商...
**相关滤波推荐算法** 相关滤波推荐算法是一种在推荐系统中广泛应用的机器学习方法,主要基于用户的历史行为数据来预测他们对未评价物品的喜好程度。这种算法假设用户会根据过去的偏好对新物品进行评价,并且用户...
3. **相关推荐**:根据当前正在观看的电影类型,推荐收藏量较高的类似电影,同样会排除用户已经收藏过的电影。 4. **数据来源**:系统使用的是由GroupLens项目组从美国著名电影网站MovieLens整理的数据集,其中包含...