一种在flash上进行位图微像素处理的方法

文档序号:6334611阅读:971来源:国知局
专利名称:一种在flash上进行位图微像素处理的方法
技术领域
本发明涉及一种图像处理方法,尤其涉及一种在flash上进行位图微像素处理的方法。
背景技术
flash内部度量对象位置和尺寸的单位是缇(Twips),目的是为了让应用程序元素输出到不同设备时都能保持一致的计算方式。一般可以使用以下换算公式将英寸或厘米转换为缇或磅(1缇为1/20磅)1 磅=1/72 英寸=20 缇1 英寸=72 磅=1440 缇1 厘米=567 缇{B^^flash^M^II^X^WAPI (Application Programming Interface, j^M 程序接口,又称为应用编程接口,就是软件系统不同组成部分衔接的约定)的参数类型大部分是双精度浮点数的数据类型,比如设置DisplayObjetct (DisplayOb ject类是可放在显示列表中的所有对象的基类)的width(宽),height (高),X,y等属性,这时程序可能表达出比缇精度更高的数值导致flash需要对该值进行取舍。这样的话在某种精度要求很高或有缩放的环境下会导致显示上的sub-pixelbug(亚像素错误)。如图1所示,图Ia中 3个图片的Scale (比例)设置为1,图Ib中3个图片的Scale (比例)设置为1. 0006 ;可以看出图Ib的第二和第三个图片中间有一条缝隙,而有的时候这条缝隙是必须处理掉的。解决上述问题有以下几个难点难点1 此类问题不易被发觉和重现。因为此类问题需要特定的缩放环境才能产生,所以一般不易被察觉和重现。当出现时往往认为是程序上的bug而去反复的检查程序, 这样给问题的定位带来了困难。难点2 修复对象的尺寸和位置难以确定。选择一个合适的精度对对象的位置和大小进行修复是比较困难的。

发明内容
本发明要解决的技术问题是提供一种在flash上进行位图微像素处理的方法,该方法可以有效地解决sub-pixel bug(亚像素错误)问题。为解决上述技术问题,本发明提供一种在flash上进行位图微像素处理的方法, 包括如下步骤(1)如果出现亚像素错误问题,判断图像是否为简单的平铺方式;如果是则用 flash draw API (指在flash创作环境中的绘画的接口方法)提供的beginBitmapFill API 方法来解决亚像素错误问题;如果否则进入步骤(2);(2)判断图像是否可以在父层统一缩放;如果是则在其父层进行统一缩放,以解决亚像素错误问题;如果否则进入步骤(3);
(3)修复对象的位置和尺寸,判断对象的位置和尺寸是否小于flash中能处理的基于缇(Twips)为单位所对应的像素值;如是则对该对象的位置和尺寸基于缇为单位所对应的像素值进行修正,以解决亚像素错误问题。步骤(1)中,所述用flash draw API提供的beginBitmapFill API方法来解决亚像素错误问题,具体为用beginBitmapFill API方法设置平铺方式为重复,即设置r印eat 参数为true来解决亚像素错误问题。步骤( 具体包括如下步骤A.计算flash中能处理的最小像素值1磅=1/72英寸=20缇,假设屏幕DPI等于72DPI,则flash中能处理的最小像素值为0. 05px,即1/20缇;B.计算对象的实际尺寸并进行修正将对象的尺寸X乘以其缩放比例Y得到结果 M,发现其结果M非0. 05px的整数倍,这时需要对该结果M基于0. 05的精度进行四舍五入
得结果N;C.设置对象修正后的尺寸和位置将步骤B的结果N除以对象的尺寸X得到缩放比例Y’,根据该缩放比例Y’来计算设置对象修正后的尺寸和位置。本发明的有益效果在于本发明可以有效地解决sub-pixel bug(亚像素错误)问题,且步骤简单,可操作性强。


图1是现有在flash中操作显示对象时导致显示上出现sub-pixel bug(亚像素错误)的示意图;其中,图Ia中3个图片的比例)设置为1 ;图Ib中3个图片的 Scale (比例)设置为1.0006 ;图2是本发明方法的流程示意图。
具体实施例方式如图2所示,本发明一种在flash上进行位图微像素处理的方法,包括如下步骤1.如果出现sub-pixel bug(亚像素错误)问题,判断图像是否为简单的平铺方式;如果是则使用flash draw API (指在flash创作环境中的绘画的接口方法,属于本领域公知的方法)提供的beginBitmapFill API (设置平铺方式为重复,即设置r印eat参数为 true)来完成此工作(即解决sub-pixel bug问题);如果否则进入步骤2。例如(代码示例//开头表示注释行)H已知的位图对象(bitmapdata)H创建一个简单形状并命名为shape var shape Shape = new Shape ();H获取shape的矢量图形的对象的引用并命名为graphic var graphic :Graphics = shape, graphic ;//调用graphic的画图API,填充一张位图bitmapdata,设置r印eat参数为 true graphic. beginBitmapFill (bitmapdata,null,true);//将该位图 bitmapdata 填充到坐标(0,0)大小 bitmapdata. width, bitmapdata.height的区域中graphic. drawRect (0,0, bitmapdata. width, bitmapdata. height);//画图程序结束graphic. endFill ()。2.判断图像是否可以在父层(即父层容器或父容器)统一缩放;如果是则在其父层对其所有子显示对象进行统一的缩放,以解决sub-pixel bug问题;如果否则进入步骤 3。例如(代码示例H开头表示注释行)// 已知的位图对象(bitmapdataA, bitmapdataB,父容器 spriteA)H声明一个变量并命名为scaleX值为1. 0006 var scaleX Number = 1. 0006 ;H设置位图对象bitmapdataA的水平方向缩放为scaleX,即1. 0006 bitmapdataA. scaleX = scaleX ;H设置位图对象bitmapdataA的水平方向的坐标为0 bitmapdataA. χ = 0 ;H设置位图对象bitmapdataB的水平方向缩放为scaleX,即1. 0006 bitmapdataB. scaleX = scaleX ;H设置位图对象bitmapdataB的水平方向的坐标值为bitmapdataA在水平方向上的缩放值乘以bitmapdataA的实际宽度bitmapdataB. χ = bitmapdataA. scaleX^bitmapdataA. width ;(改成)H声明一个变量并命名为scaleX值为1. 0006 var scaleX Number = 1. 0006 ;Il设置显示对象sprite的水平方向缩放为scaleX,即为1. 0006 sprite. scaleX = scaleX。3.修复对象的位置和尺寸,判断对象的位置和尺寸是否小于flash中能处理的基于缇(Twips)为单位所对应的像素值。如是则对该对象的位置和尺寸基于缇(Twips)为单位所对应的像素值进行修正,以解决sub-pixel bug(亚像素错误)问题;fii^WM^X^^. displayObjectA, displayObjectB, displayObjectA 白勺胃贞力 345px (像素),displayOb jectB的宽度为456px (像素),现需要将displayObjectA缩放至 1. 006,displayOb jectB 缩放至 1. 007,然后将 displayObjectA、displayOb jectB 两个显示对象水平排列。具体步骤1)计算flash中能够处理的最小像素值1磅=1/72英寸=20缇,假设屏幕 DPI (Dots Per Inch的缩写,每英寸所打印的点数或线数)等于72DPI,则flash中能够处理的最小像素值为0. 05px (像素),即1/20缇。2)计算对象的实际尺寸并进行修正345pX(diSplay0bjeCtA的宽度单位像素)*1.006 = 347. 07,发现非0. 05px (像素)的整数倍(flash会对该结果进行不可控的取舍,是屏幕出现亚像素错误问题根本原因),这时需要对结果347. 07基于0. 05的精度进行四舍五入,即对347. 07的小数点后的第二位进行四舍五入,即347. 07 =》347. 1。3)设置对象修正后的尺寸和位置A.重新计算displayObjectA的正确缩放值scale为scale = 347. 1/345 ;B.设置displayObjectA的缩放的水平方向上的缩放为scale displayObjectA. scaleX = scale ;displayObjectA. χ = 0 ;C.根据displayObjectA的水平方向上的缩放和displayObjectA在水平方向上的位置来设置displayObjectB的水平方向上的位置displayObjectB. χ = displayObjectA. width^scale+dispIayObjectA. x。
权利要求
1.一种在flash上进行位图微像素处理的方法,其特征在于,包括如下步骤(1)如果出现亚像素错误问题,判断图像是否为简单的平铺方式;如果是则用flashdraw API提供的beginBitmapFill API方法来解决亚像素错误问题;如果否则进入步骤 ⑵;(2)判断图像是否可以在父层统一缩放;如果是则在其父层进行统一缩放,以解决亚像素错误问题;如果否则进入步骤(3);(3)修复对象的位置和尺寸,判断对象的位置和尺寸是否小于flash中能处理的基于缇为单位所对应的像素值;如是则对该对象的位置和尺寸基于缇为单位所对应的像素值进行修正,以解决亚像素错误问题。
2.如权利要求1所述的在flash上进行位图微像素处理的方法,其特征在于,步骤(1) 中,所述用flash draw API提供的beginBitmapFill API方法来解决亚像素错误问题,具体为用beginBitmapFill API方法设置平铺方式为重复,即设置r印eat参数为true来解决亚像素错误问题。
3.如权利要求1所述的在flash上进行位图微像素处理的方法,其特征在于,步骤(3) 具体包括如下步骤A.计算flash中能处理的最小像素值1磅=1/72英寸=20缇,假设屏幕DPI等于 72DPI,则flash中能处理的最小像素值为0. 05px,即1/20缇;B.计算对象的实际尺寸并进行修正将对象的尺寸X乘以其缩放比例Y得到结果M,发现其结果M非0. 05px的整数倍,这时需要对该结果M基于0. 05的精度进行四舍五入得结果N;C.设置对象修正后的尺寸和位置将步骤B的结果N除以对象的尺寸X得到缩放比例 Y’,根据该缩放比例Y’来计算设置对象修正后的尺寸和位置。
全文摘要
本发明公开了一种在flash上进行位图微像素处理的方法,包括如下步骤1)如出现亚像素错误问题,判断图像是否为简单的平铺方式;如是则用flashdraw API提供的beginBitmapFill API方法(设置平铺方式为重复)来解决亚像素错误问题;如否则进入步骤2);2)判断图像是否可在父层统一缩放;如是则在父层统一缩放,以解决亚像素错误问题;如否则进入步骤3);3)修复对象的位置和尺寸,判断对象的位置和尺寸是否小于flash中能处理的基于缇为单位所对应的像素值;如是则对该对象的位置和尺寸基于缇为单位所对应的像素值进行修正,以解决亚像素错误问题。该方法可以有效地解决亚像素错误问题。
文档编号G06T3/40GK102456218SQ20101052325
公开日2012年5月16日 申请日期2010年10月28日 优先权日2010年10月28日
发明者张 诚 申请人:盛乐信息技术(上海)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1