專利名稱:一種在flash上進行位圖微像素處理的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種圖像處理方法,尤其涉及一種在flash上進行位圖微像素處理的方法。
背景技術(shù):
flash內(nèi)部度量對象位置和尺寸的單位是緹(Twips),目的是為了讓應(yīng)用程序元素輸出到不同設(shè)備時都能保持一致的計算方式。一般可以使用以下?lián)Q算公式將英寸或厘米轉(zhuǎn)換為緹或磅(1緹為1/20磅)1 磅=1/72 英寸=20 緹1 英寸=72 磅=1440 緹1 厘米=567 緹{B^^flash^M^II^X^WAPI (Application Programming Interface, j^M 程序接口,又稱為應(yīng)用編程接口,就是軟件系統(tǒng)不同組成部分銜接的約定)的參數(shù)類型大部分是雙精度浮點數(shù)的數(shù)據(jù)類型,比如設(shè)置DisplayObjetct (DisplayOb ject類是可放在顯示列表中的所有對象的基類)的width(寬),height (高),X,y等屬性,這時程序可能表達出比緹精度更高的數(shù)值導(dǎo)致flash需要對該值進行取舍。這樣的話在某種精度要求很高或有縮放的環(huán)境下會導(dǎo)致顯示上的sub-pixelbug(亞像素錯誤)。如圖1所示,圖Ia中 3個圖片的Scale (比例)設(shè)置為1,圖Ib中3個圖片的Scale (比例)設(shè)置為1. 0006 ;可以看出圖Ib的第二和第三個圖片中間有一條縫隙,而有的時候這條縫隙是必須處理掉的。解決上述問題有以下幾個難點難點1 此類問題不易被發(fā)覺和重現(xiàn)。因為此類問題需要特定的縮放環(huán)境才能產(chǎn)生,所以一般不易被察覺和重現(xiàn)。當出現(xiàn)時往往認為是程序上的bug而去反復(fù)的檢查程序, 這樣給問題的定位帶來了困難。難點2 修復(fù)對象的尺寸和位置難以確定。選擇一個合適的精度對對象的位置和大小進行修復(fù)是比較困難的。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題是提供一種在flash上進行位圖微像素處理的方法,該方法可以有效地解決sub-pixel bug(亞像素錯誤)問題。為解決上述技術(shù)問題,本發(fā)明提供一種在flash上進行位圖微像素處理的方法, 包括如下步驟(1)如果出現(xiàn)亞像素錯誤問題,判斷圖像是否為簡單的平鋪方式;如果是則用 flash draw API (指在flash創(chuàng)作環(huán)境中的繪畫的接口方法)提供的beginBitmapFill API 方法來解決亞像素錯誤問題;如果否則進入步驟(2);(2)判斷圖像是否可以在父層統(tǒng)一縮放;如果是則在其父層進行統(tǒng)一縮放,以解決亞像素錯誤問題;如果否則進入步驟(3);
(3)修復(fù)對象的位置和尺寸,判斷對象的位置和尺寸是否小于flash中能處理的基于緹(Twips)為單位所對應(yīng)的像素值;如是則對該對象的位置和尺寸基于緹為單位所對應(yīng)的像素值進行修正,以解決亞像素錯誤問題。步驟(1)中,所述用flash draw API提供的beginBitmapFill API方法來解決亞像素錯誤問題,具體為用beginBitmapFill API方法設(shè)置平鋪方式為重復(fù),即設(shè)置r印eat 參數(shù)為true來解決亞像素錯誤問題。步驟( 具體包括如下步驟A.計算flash中能處理的最小像素值1磅=1/72英寸=20緹,假設(shè)屏幕DPI等于72DPI,則flash中能處理的最小像素值為0. 05px,即1/20緹;B.計算對象的實際尺寸并進行修正將對象的尺寸X乘以其縮放比例Y得到結(jié)果 M,發(fā)現(xiàn)其結(jié)果M非0. 05px的整數(shù)倍,這時需要對該結(jié)果M基于0. 05的精度進行四舍五入
得結(jié)果N;C.設(shè)置對象修正后的尺寸和位置將步驟B的結(jié)果N除以對象的尺寸X得到縮放比例Y’,根據(jù)該縮放比例Y’來計算設(shè)置對象修正后的尺寸和位置。本發(fā)明的有益效果在于本發(fā)明可以有效地解決sub-pixel bug(亞像素錯誤)問題,且步驟簡單,可操作性強。
圖1是現(xiàn)有在flash中操作顯示對象時導(dǎo)致顯示上出現(xiàn)sub-pixel bug(亞像素錯誤)的示意圖;其中,圖Ia中3個圖片的比例)設(shè)置為1 ;圖Ib中3個圖片的 Scale (比例)設(shè)置為1.0006 ;圖2是本發(fā)明方法的流程示意圖。
具體實施例方式如圖2所示,本發(fā)明一種在flash上進行位圖微像素處理的方法,包括如下步驟1.如果出現(xiàn)sub-pixel bug(亞像素錯誤)問題,判斷圖像是否為簡單的平鋪方式;如果是則使用flash draw API (指在flash創(chuàng)作環(huán)境中的繪畫的接口方法,屬于本領(lǐng)域公知的方法)提供的beginBitmapFill API (設(shè)置平鋪方式為重復(fù),即設(shè)置r印eat參數(shù)為 true)來完成此工作(即解決sub-pixel bug問題);如果否則進入步驟2。例如(代碼示例//開頭表示注釋行)H已知的位圖對象(bitmapdata)H創(chuàng)建一個簡單形狀并命名為shape var shape Shape = new Shape ();H獲取shape的矢量圖形的對象的引用并命名為graphic var graphic :Graphics = shape, graphic ;//調(diào)用graphic的畫圖API,填充一張位圖bitmapdata,設(shè)置r印eat參數(shù)為 true graphic. beginBitmapFill (bitmapdata,null,true);//將該位圖 bitmapdata 填充到坐標(0,0)大小 bitmapdata. width, bitmapdata.height的區(qū)域中g(shù)raphic. drawRect (0,0, bitmapdata. width, bitmapdata. height);//畫圖程序結(jié)束graphic. endFill ()。2.判斷圖像是否可以在父層(即父層容器或父容器)統(tǒng)一縮放;如果是則在其父層對其所有子顯示對象進行統(tǒng)一的縮放,以解決sub-pixel bug問題;如果否則進入步驟 3。例如(代碼示例H開頭表示注釋行)// 已知的位圖對象(bitmapdataA, bitmapdataB,父容器 spriteA)H聲明一個變量并命名為scaleX值為1. 0006 var scaleX Number = 1. 0006 ;H設(shè)置位圖對象bitmapdataA的水平方向縮放為scaleX,即1. 0006 bitmapdataA. scaleX = scaleX ;H設(shè)置位圖對象bitmapdataA的水平方向的坐標為0 bitmapdataA. χ = 0 ;H設(shè)置位圖對象bitmapdataB的水平方向縮放為scaleX,即1. 0006 bitmapdataB. scaleX = scaleX ;H設(shè)置位圖對象bitmapdataB的水平方向的坐標值為bitmapdataA在水平方向上的縮放值乘以bitmapdataA的實際寬度bitmapdataB. χ = bitmapdataA. scaleX^bitmapdataA. width ;(改成)H聲明一個變量并命名為scaleX值為1. 0006 var scaleX Number = 1. 0006 ;Il設(shè)置顯示對象sprite的水平方向縮放為scaleX,即為1. 0006 sprite. scaleX = scaleX。3.修復(fù)對象的位置和尺寸,判斷對象的位置和尺寸是否小于flash中能處理的基于緹(Twips)為單位所對應(yīng)的像素值。如是則對該對象的位置和尺寸基于緹(Twips)為單位所對應(yīng)的像素值進行修正,以解決sub-pixel bug(亞像素錯誤)問題;fii^WM^X^^. displayObjectA, displayObjectB, displayObjectA 白勺胃貞力 345px (像素),displayOb jectB的寬度為456px (像素),現(xiàn)需要將displayObjectA縮放至 1. 006,displayOb jectB 縮放至 1. 007,然后將 displayObjectA、displayOb jectB 兩個顯示對象水平排列。具體步驟1)計算flash中能夠處理的最小像素值1磅=1/72英寸=20緹,假設(shè)屏幕 DPI (Dots Per Inch的縮寫,每英寸所打印的點數(shù)或線數(shù))等于72DPI,則flash中能夠處理的最小像素值為0. 05px (像素),即1/20緹。2)計算對象的實際尺寸并進行修正345pX(diSplay0bjeCtA的寬度單位像素)*1.006 = 347. 07,發(fā)現(xiàn)非0. 05px (像素)的整數(shù)倍(flash會對該結(jié)果進行不可控的取舍,是屏幕出現(xiàn)亞像素錯誤問題根本原因),這時需要對結(jié)果347. 07基于0. 05的精度進行四舍五入,即對347. 07的小數(shù)點后的第二位進行四舍五入,即347. 07 =》347. 1。3)設(shè)置對象修正后的尺寸和位置A.重新計算displayObjectA的正確縮放值scale為scale = 347. 1/345 ;B.設(shè)置displayObjectA的縮放的水平方向上的縮放為scale displayObjectA. scaleX = scale ;displayObjectA. χ = 0 ;C.根據(jù)displayObjectA的水平方向上的縮放和displayObjectA在水平方向上的位置來設(shè)置displayObjectB的水平方向上的位置displayObjectB. χ = displayObjectA. width^scale+dispIayObjectA. x。
權(quán)利要求
1.一種在flash上進行位圖微像素處理的方法,其特征在于,包括如下步驟(1)如果出現(xiàn)亞像素錯誤問題,判斷圖像是否為簡單的平鋪方式;如果是則用flashdraw API提供的beginBitmapFill API方法來解決亞像素錯誤問題;如果否則進入步驟 ⑵;(2)判斷圖像是否可以在父層統(tǒng)一縮放;如果是則在其父層進行統(tǒng)一縮放,以解決亞像素錯誤問題;如果否則進入步驟(3);(3)修復(fù)對象的位置和尺寸,判斷對象的位置和尺寸是否小于flash中能處理的基于緹為單位所對應(yīng)的像素值;如是則對該對象的位置和尺寸基于緹為單位所對應(yīng)的像素值進行修正,以解決亞像素錯誤問題。
2.如權(quán)利要求1所述的在flash上進行位圖微像素處理的方法,其特征在于,步驟(1) 中,所述用flash draw API提供的beginBitmapFill API方法來解決亞像素錯誤問題,具體為用beginBitmapFill API方法設(shè)置平鋪方式為重復(fù),即設(shè)置r印eat參數(shù)為true來解決亞像素錯誤問題。
3.如權(quán)利要求1所述的在flash上進行位圖微像素處理的方法,其特征在于,步驟(3) 具體包括如下步驟A.計算flash中能處理的最小像素值1磅=1/72英寸=20緹,假設(shè)屏幕DPI等于 72DPI,則flash中能處理的最小像素值為0. 05px,即1/20緹;B.計算對象的實際尺寸并進行修正將對象的尺寸X乘以其縮放比例Y得到結(jié)果M,發(fā)現(xiàn)其結(jié)果M非0. 05px的整數(shù)倍,這時需要對該結(jié)果M基于0. 05的精度進行四舍五入得結(jié)果N;C.設(shè)置對象修正后的尺寸和位置將步驟B的結(jié)果N除以對象的尺寸X得到縮放比例 Y’,根據(jù)該縮放比例Y’來計算設(shè)置對象修正后的尺寸和位置。
全文摘要
本發(fā)明公開了一種在flash上進行位圖微像素處理的方法,包括如下步驟1)如出現(xiàn)亞像素錯誤問題,判斷圖像是否為簡單的平鋪方式;如是則用flashdraw API提供的beginBitmapFill API方法(設(shè)置平鋪方式為重復(fù))來解決亞像素錯誤問題;如否則進入步驟2);2)判斷圖像是否可在父層統(tǒng)一縮放;如是則在父層統(tǒng)一縮放,以解決亞像素錯誤問題;如否則進入步驟3);3)修復(fù)對象的位置和尺寸,判斷對象的位置和尺寸是否小于flash中能處理的基于緹為單位所對應(yīng)的像素值;如是則對該對象的位置和尺寸基于緹為單位所對應(yīng)的像素值進行修正,以解決亞像素錯誤問題。該方法可以有效地解決亞像素錯誤問題。
文檔編號G06T3/40GK102456218SQ20101052325
公開日2012年5月16日 申請日期2010年10月28日 優(yōu)先權(quán)日2010年10月28日
發(fā)明者張 誠 申請人:盛樂信息技術(shù)(上海)有限公司