專利名稱:在目標(biāo)區(qū)域內(nèi)繪制字符串的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及文字繪制處理領(lǐng)域,特別涉及一種在目標(biāo)區(qū)域內(nèi)繪制字 符串的方法及裝置。
背景技術(shù):
在現(xiàn)有的網(wǎng)頁或應(yīng)用程序中,由于界面繪制、文字編輯、打印輸出 等需要,要求系統(tǒng)具有在目標(biāo)區(qū)域內(nèi),例如,單元格內(nèi),輸出不確定長 度的字符串的功能。當(dāng)所述字符串的長度超過該目標(biāo)區(qū)域的長度時(shí),除 了通過用戶手動(dòng)調(diào)整字體大小以縮小字符串的長度外,現(xiàn)有技術(shù)中提供 了"自動(dòng)換行"和"縮小字體填充"兩種解決方案。"自動(dòng)換行"是指當(dāng)目標(biāo)區(qū)域內(nèi)的字符串長度超過該區(qū)域的寬度時(shí),將 區(qū)域內(nèi)中超過該區(qū)域?qū)挾鹊淖址瑩Q到下一行顯示,通常在這種情況下,系統(tǒng)可以自動(dòng)改變?cè)撃繕?biāo)區(qū)域的高度以容納所述字符串;"縮小字體 填充"是指當(dāng)目標(biāo)區(qū)域內(nèi)顯示的內(nèi)容的寬度超過該區(qū)域的寬度時(shí),自動(dòng)縮 小字體,在不改變?cè)搮^(qū)域?qū)挾鹊那闆r下將內(nèi)容全部顯示在該區(qū)域內(nèi),并且,該區(qū)域內(nèi)的字符大小會(huì)依該區(qū)域的寬度自動(dòng)調(diào)整。由于自動(dòng)換行的輸出是不改變字體大小,將字符串轉(zhuǎn)換成多行顯示, 而縮小字體填充的輸出是改變字體大小,將字符串在一行內(nèi)顯示,因而 在現(xiàn)有技術(shù)中,這兩種解決方案是不能同時(shí)執(zhí)行的,也就是說,用戶只 能以擇一的方式選擇現(xiàn)有技術(shù)中"自動(dòng)換行"或"縮小字體填充"的功能。例 如,在現(xiàn)有的EXCEL中,這兩種功能就是不能同時(shí)使用的。然而,如果目標(biāo)區(qū)域內(nèi)繪制字符串的內(nèi)容較多,往往既需要將目標(biāo) 區(qū)域內(nèi)的字符串進(jìn)行換行處理,又需要將這些字符進(jìn)行縮小字體處理, 在這種情況下,由于現(xiàn)有技術(shù)不能同時(shí)實(shí)現(xiàn)"自動(dòng)換行"和"縮小字體填充" 的功能,因而其處理只能由用戶先將目標(biāo)區(qū)域內(nèi)的字符進(jìn)行縮小字體處 理,然后執(zhí)行自動(dòng)換行操作或強(qiáng)制換行操作實(shí)現(xiàn),顯然,這樣的操作過
于復(fù)雜,從而導(dǎo)致用戶體驗(yàn)較差。并且,在目標(biāo)字符串的內(nèi)容不能預(yù)先 確定的情況下,這種人為設(shè)置的方式甚至無法實(shí)現(xiàn)。所以,本領(lǐng)域技術(shù)人員迫切需要發(fā)展出 一種可以在保證字符串繪制 效率的前提下,在目標(biāo)區(qū)域內(nèi)同時(shí)實(shí)現(xiàn)自動(dòng)換行和縮小字體填充處理的 字符串繪制方法及裝置。發(fā)明內(nèi)容本發(fā)明所要解決的技術(shù)問題是提供一種在目標(biāo)區(qū)域內(nèi)繪制字符串的 方法,用以解決現(xiàn)有技術(shù)中不能在目標(biāo)區(qū)域內(nèi)同時(shí)實(shí)現(xiàn)自動(dòng)換行和縮小 字體填充處理,以及無法保證字符串繪制效率問題。本發(fā)明還提供了 一種在目標(biāo)區(qū)域內(nèi)繪制字符串的裝置,用以保證在 實(shí)際中的實(shí)現(xiàn)及應(yīng)用。為解決上述技術(shù)問題,本發(fā)明實(shí)施例公開了 一種在目標(biāo)區(qū)域內(nèi)繪制字符串的方法,包括預(yù)設(shè)字號(hào)變動(dòng)范圍,所述字號(hào)變動(dòng)范圍為可變字號(hào)下限與可變字號(hào)上限所限定的范圍;在目標(biāo)區(qū)域內(nèi)按照基準(zhǔn)字號(hào)繪制字符串;判斷所繪制的字符串是否超過所述目標(biāo)區(qū)域的大小;如果是,則在所述基準(zhǔn)字號(hào)小于所述可變字號(hào)上限時(shí),將所述基準(zhǔn)字號(hào)替換所述可變字號(hào)上限;以及,按照第一預(yù)置規(guī)則縮小所述基準(zhǔn)字號(hào);如果否,則在所述基準(zhǔn)字號(hào)大于所述可變字號(hào)下限時(shí),將所述基準(zhǔn) 字號(hào)替換所述可變字號(hào)下限;以及,按照第二預(yù)置規(guī)則放大所述基準(zhǔn)字判斷所述縮小或放大的基準(zhǔn)字號(hào)是否在所述字號(hào)變動(dòng)范圍內(nèi),如果 是,則在所述目標(biāo)區(qū)域內(nèi)按照所述縮小或放大的基準(zhǔn)字號(hào)重新繪制所述 字符串;如果否,則保存所述目標(biāo)區(qū)域內(nèi)的字符串繪制結(jié)果。優(yōu)選的是,所述判斷字符串是否超過所述目標(biāo)區(qū)域的大小的步驟進(jìn) 一步包括當(dāng)所繪制的字符為換行標(biāo)識(shí)符,或者,所繪制字符的位移超過所述 目標(biāo)區(qū)域的寬度時(shí),則位移至所述目標(biāo)區(qū)域的下一個(gè)行高繪制該字符;判斷所繪制字符串的高度是否超過所述目標(biāo)區(qū)域的高度,如果是, 則為所繪制的字符串超過所述目標(biāo)區(qū)域的大小,如果否,則為所繪制的 字符串未超過所述目標(biāo)區(qū)域的大小。優(yōu)選的是,所述的方法,在字符串繪制步驟以前,還包括 調(diào)整所述基準(zhǔn)字號(hào)。優(yōu)選的是,通過以下子步驟調(diào)整所述基準(zhǔn)字號(hào) 判斷所述基準(zhǔn)字號(hào)是否小于或等于O,如果是,則將所述基準(zhǔn)字號(hào)置 0,如果否,則獲取字符串的總寬度和行高;根據(jù)所述字符串的總寬度和實(shí)際字符個(gè)數(shù)計(jì)算字符的平均寬度; 根據(jù)所述字符的平均寬度和行高計(jì)算所述字符的平均單位面積; 計(jì)算目標(biāo)區(qū)域的總面積,將所述總面積與所述字符的平均單位面積進(jìn)行對(duì)比,獲得所述目標(biāo)區(qū)域的可容字符個(gè)數(shù);判斷所述可容字符個(gè)數(shù)是否大于或等于所述實(shí)際字符個(gè)數(shù),如果是, 則保留所述基準(zhǔn)字號(hào);如果否,則根據(jù)所述可容字符個(gè)數(shù)與實(shí)際字符個(gè) 數(shù)生成調(diào)整系數(shù),并按照所述調(diào)整系數(shù)調(diào)整所述基準(zhǔn)字號(hào)。優(yōu)選的是,所述縮小基準(zhǔn)字號(hào)的步驟包括根據(jù)所述字符串的實(shí)際字符個(gè)數(shù)和已繪制字符個(gè)數(shù)計(jì)算縮小系數(shù);將所述基準(zhǔn)字號(hào)按照所述縮小系數(shù)進(jìn)行縮小。優(yōu)選的是,所述放大基準(zhǔn)字號(hào)的步驟包括根據(jù)所述目標(biāo)區(qū)域的高度和所繪制字符串的高度計(jì)算放大系數(shù);將所述基準(zhǔn)字號(hào)按照所述放大系數(shù)進(jìn)行放大。本發(fā)明實(shí)施例還公開了 一種在目標(biāo)區(qū)域內(nèi)繪制字符串的裝置,包括 預(yù)設(shè)單元,用于預(yù)設(shè)字號(hào)變動(dòng)范圍,所述字號(hào)變動(dòng)范圍為可變字號(hào)下限與可變字號(hào)上限所限定的范圍;繪制單元,用于在目標(biāo)區(qū)域內(nèi)按照基準(zhǔn)字號(hào)繪制字符串;第 一判斷單元,用于判斷所繪制的字符串是否超過所述目標(biāo)區(qū)域的大小,如果是,則觸發(fā)第一調(diào)整單元;如果否,則觸發(fā)第二調(diào)整單元; 第一調(diào)整單元,用于在所述基準(zhǔn)字號(hào)小于所述可變字號(hào)上限時(shí),將所述基準(zhǔn)字號(hào)替換所述可變字號(hào)上限;以及,按照第一預(yù)置規(guī)則縮小所
述基準(zhǔn)字號(hào);第二調(diào)整單元,用于在所述基準(zhǔn)字號(hào)大于所述可變字號(hào)下限時(shí),將所述基準(zhǔn)字號(hào)替換所述可變字號(hào)下限;以及,按照第二預(yù)置規(guī)則放大所 述基準(zhǔn)字號(hào);第二判斷單元,用于判斷所述縮小或放大的基準(zhǔn)字號(hào)是否在所述字 號(hào)變動(dòng)范圍內(nèi),如果是,則觸發(fā)所述繪制單元在所述目標(biāo)區(qū)域內(nèi)按照所 述縮小或放大的基準(zhǔn)字號(hào)重新繪制所述字符串;如果否,則觸發(fā)保存單元;保存單元,用于保存所述目標(biāo)區(qū)域內(nèi)的字符串繪制結(jié)果。優(yōu)選的是,所述第一判斷單元進(jìn)一步包括換行子單元,用于在所繪制的字符為換行標(biāo)識(shí)符,或者,所繪制字 符的位移超過所述目標(biāo)區(qū)域的寬度時(shí),位移至所述目標(biāo)區(qū)域的下一個(gè)行高繪制該字符;高度判斷子單元,用于判斷所繪制字符串的高度是否超過所述目標(biāo) 區(qū)域的高度,如果是,則為所繪制的字符串超過所述目標(biāo)區(qū)域的大小, 如果否,則為所繪制的字符串未超過所述目標(biāo)區(qū)域的大小。優(yōu)選的是,所述的裝置,還包括調(diào)整單元,用于調(diào)整所述基準(zhǔn)字號(hào)。優(yōu)選的是,所述調(diào)整單元包括初始判斷子單元,用于判斷所述基準(zhǔn)字號(hào)是否小于或等于O,如果是, 則觸發(fā)置零子單元;如果否,則觸發(fā)獲取子單元;置零子單元,用于將所述基準(zhǔn)字號(hào)置0;獲取子單元,用于獲取字符串的總寬度和行高;平均寬度計(jì)算子單元,用于根據(jù)所述字符串的總寬度和實(shí)際字符個(gè) 數(shù)計(jì)算字符的平均寬度;單位面積計(jì)算子單元,用于根據(jù)所述字符的平均寬度和行高計(jì)算所述字符的平均單位面積;可容字符計(jì)算子單元,用于計(jì)算目標(biāo)區(qū)域的總面積,將所述總面積 與所述字符的平均單位面積進(jìn)行對(duì)比,獲得所述目標(biāo)區(qū)域的可容字符個(gè) 數(shù);
字號(hào)確定子單元,用于判斷所述可容字符個(gè)數(shù)是否大于或等于所述 實(shí)際字符個(gè)數(shù),如果是,則保留所述基準(zhǔn)字號(hào);如果否,則根據(jù)所述可 容字符個(gè)數(shù)與實(shí)際字符個(gè)數(shù)生成調(diào)整系數(shù),并按照所述調(diào)整系數(shù)調(diào)整所 述基準(zhǔn)字號(hào)。與現(xiàn)有技術(shù)相比,本發(fā)明實(shí)施例具有以下優(yōu)點(diǎn)得目標(biāo)字號(hào)的字符串的繪制效率;并且,本發(fā)明只要判斷當(dāng)前字號(hào)是否在這個(gè)變動(dòng)范圍內(nèi),即可確定 繪制過程的發(fā)起和結(jié)束,從而減少了繪制過程不必要的資源浪費(fèi),進(jìn)一 步有效提高了繪制效率;再者,本發(fā)明通過預(yù)先調(diào)整基準(zhǔn)字號(hào)用以繪制,使基準(zhǔn)字號(hào)更為接 近目標(biāo)字號(hào),減少了嘗試?yán)L制的次數(shù),從而進(jìn)一步有效提高了繪制效率;此外,本發(fā)明通過自動(dòng)分析字符在目標(biāo)區(qū)域中的位置關(guān)系,實(shí)現(xiàn)了 自動(dòng)換行和縮小字體填充功能的并行處理;最后,本發(fā)明技術(shù)實(shí)現(xiàn)簡單,無技術(shù)障礙,無特殊保密算法,成本 和風(fēng)險(xiǎn)較低。
圖1是本發(fā)明的一種在目標(biāo)區(qū)域內(nèi)繪制字符串的方法實(shí)施例的流程圖;圖2是本發(fā)明的一種字號(hào)調(diào)整方法的流程圖; 程圖;圖4是本發(fā)明的一個(gè)具體實(shí)例中的一個(gè)繪制示意圖; 圖5是本發(fā)明的一個(gè)具體實(shí)例中的另一個(gè)繪制示意圖; 圖6是本發(fā)明的一種在目標(biāo)區(qū)域內(nèi)繪制字符串的裝置實(shí)施例的結(jié)構(gòu) 框圖。
具體實(shí)施方式
為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合 附圖和具體實(shí)施方式
對(duì)本發(fā)明作進(jìn)一步詳細(xì)的說明。本發(fā)明實(shí)施例的核心構(gòu)思之 一 在于,先采用某 一 字號(hào)繪制字符串, 如果所繪制的字符串在目標(biāo)區(qū)域的大小內(nèi),則認(rèn)為該字號(hào)"適當(dāng)",反之為 "不適當(dāng)"。在這種情況下,本發(fā)明調(diào)整字號(hào)的目的在于,不斷嘗試?yán)L制, 直到找到 一個(gè)不超過初始字號(hào)的最大適當(dāng)值。嘗試?yán)L制的過程就是使字字號(hào)下限和可變字號(hào)上限,縮小其范圍。當(dāng)一次調(diào)整使字號(hào)不在可變字 號(hào)下限與可變字號(hào)上限之間的這個(gè)范圍內(nèi),即可結(jié)束繪制過程,獲得適 當(dāng)?shù)淖痔?hào)。參考圖1,示出了本發(fā)明的一種在目標(biāo)區(qū)域內(nèi)繪制字符串的方法實(shí)施例的流程圖,具體可以包括以下步驟步驟IOI、預(yù)設(shè)字號(hào)變動(dòng)范圍,所述字號(hào)變動(dòng)范圍為可變字號(hào)下限與 可變字號(hào)上限所限定的范圍;步驟102、在目標(biāo)區(qū)域內(nèi)按照基準(zhǔn)字號(hào)繪制字符串;步驟103、判斷所繪制的字符串是否超過所述目標(biāo)區(qū)域的大?。蝗绻?是,則執(zhí)行步驟104;如果否,則執(zhí)行步驟105;步驟104、在所述基準(zhǔn)字號(hào)小于所述可變字號(hào)上限時(shí),將所述基準(zhǔn)字 號(hào)替換所述可變字號(hào)上限;以及,按照第一預(yù)置規(guī)則縮小所述基準(zhǔn)字號(hào);步驟105、在所述基準(zhǔn)字號(hào)大于所述可變字號(hào)下限時(shí),將所述基準(zhǔn)字 號(hào)替換所述可變字號(hào)下限;以及,按照第二預(yù)置規(guī)則放大所述基準(zhǔn)字號(hào);步驟106、判斷所述縮小或放大的基準(zhǔn)字號(hào)是否在所述字號(hào)變動(dòng)范圍 內(nèi),如果是,則返回步驟102在所述目標(biāo)區(qū)域內(nèi)按照所述縮小或放大的 基準(zhǔn)字號(hào)重新繪制所述字符串;如果否,則執(zhí)行步驟107;步驟107、保存所述目標(biāo)區(qū)域內(nèi)的字符串繪制結(jié)果。本發(fā)明中所述字號(hào)為各種計(jì)算機(jī)系統(tǒng)中的 一 項(xiàng)字體描述信息的屬 性,也可以稱為字體大小,字體通常包括字體名稱(通常簡稱字體,如 宋體、楷體等)、字號(hào)、樣式(粗體、斜體)等信息。字號(hào)的單位為pt(磅), lpt等于l/72英寸,實(shí)際中,中文通常以諸如一號(hào)字、二號(hào)字等進(jìn)行定義,
這種"*號(hào)字,,可以轉(zhuǎn)換成以pt為單位的數(shù)值,例如,五號(hào)字為10.5pt。在本實(shí)施例中,所述基準(zhǔn)字號(hào)最初可以為用戶預(yù)置的字號(hào)、系統(tǒng)默認(rèn)的字 號(hào)或其它初始設(shè)置的字號(hào)等,在多次繪制的過程中,所述基準(zhǔn)字號(hào)還可 以為調(diào)整后的字號(hào),例如,在第二次縮小字號(hào)時(shí),其作為縮小依據(jù)的基 準(zhǔn)字號(hào)為第一次的縮小字號(hào)。在本實(shí)施例中,所述目標(biāo)區(qū)域可以為在緩存中創(chuàng)建的圖形對(duì)象,這 個(gè)圖形對(duì)象的高度和寬度是固定的。在每次按照各種字號(hào)嘗試?yán)L制時(shí),都可以創(chuàng)建一個(gè)這樣的緩存圖形對(duì)象用于字符串的繪制;當(dāng)更新可變字 號(hào)下限(即當(dāng)前最佳基準(zhǔn)字號(hào))時(shí),也可以把相應(yīng)的緩存圖形對(duì)象保留 下來,以便在輸出字符串時(shí)直接使用該緩存圖形對(duì)象的結(jié)果。在所述目標(biāo)區(qū)域內(nèi)繪制字符串中,即可理解為在所述圖形對(duì)象的相 應(yīng)坐標(biāo)位置繪制字符,例如, 一種在目標(biāo)區(qū)域內(nèi)繪制字符串的過程為創(chuàng)建一個(gè)指定高度和寬度的緩存圖形對(duì)象,設(shè)置X坐標(biāo)為0, Y坐標(biāo) 為ascent,繪制時(shí),依次取字符串中的第i個(gè)字符,X位移字符寬度;如 果所繪制的字符為換行標(biāo)識(shí)符,或者,所繪制字符的位移超過所述圖形 對(duì)象的寬度時(shí),則將X重新置0,將Y位移至下一個(gè)行高;如果Y+descent 超過了該圖形對(duì)象的高度,則表示所繪制的字符串的大小超過了該圖形 對(duì)象的大小,即超出了目標(biāo)區(qū)域的大小范圍。其中,ascent和descent是每個(gè)字符都具有的屬性,ascent是字符超出 基線(baseline)之上的距離;descent是字符超出基線以下的距離。基線 是指,當(dāng)程序?qū)⒆址胖迷谀硞€(gè)坐標(biāo)(x, y)處時(shí),該字符的放置會(huì)使 得其引用點(diǎn)(標(biāo)準(zhǔn)設(shè)置的特定位置點(diǎn))也放置在該位置。引用點(diǎn)指定一 條水平線即稱為字符的基線,字符通過基線保持水平對(duì)齊。行高 一行 字符所占的高度。它可度量為相鄰文本行的基線之間的距離。它是標(biāo)準(zhǔn) 行間距(leading )、 ascent、 descent的總和。對(duì)于確定的字體和字號(hào)而言, ascent、 descent是確定的最大值,行高也可以隨之確定。因而,在本實(shí)施例中,所述判斷步驟102可以進(jìn)一步包括以下子步驟子步驟A1、如果所繪制的字符為換行標(biāo)識(shí)符,則位移至所述目標(biāo)區(qū) 域的下一個(gè)行高繪制該字符;
子步驟A2、判斷所繪制字符串的高度是否超過所述目標(biāo)區(qū)域的高度, 如果是,則判定所繪制的字符串超過所述目標(biāo)區(qū)域的大小,如果否,則 判定所繪制的字符串未超過所述目標(biāo)區(qū)域的大小?;蛘?,可以包括以下子步驟子步驟B1、如果所繪制字符的位移超過所述目標(biāo)區(qū)域的寬度,則位 移至所述目標(biāo)區(qū)域的下 一 個(gè)行高繪制該字符;子步驟B2、判斷所繪制字符串的高度是否超過所述目標(biāo)區(qū)域的高度, 如果是,則判定所繪制的字符串超過所述目標(biāo)區(qū)域的大小,如果否,則 判定所繪制的字符串未超過所述目標(biāo)區(qū)域的大小。當(dāng)然,本領(lǐng)域技術(shù)人員根據(jù)需要或經(jīng)驗(yàn)采用其它判斷方法判斷所繪制 的字符串是否超過所述目標(biāo)區(qū)域的大小都是可行的,本發(fā)明對(duì)此不需要 進(jìn)行限定??梢岳斫獾氖?,對(duì)于每一個(gè)字符,在目標(biāo)區(qū)域內(nèi)都會(huì)占據(jù)一小塊面積, 因而,本發(fā)明實(shí)施例中的又一構(gòu)思之一在于,通過對(duì)面積的計(jì)算生成字 號(hào)調(diào)整的規(guī)則,所述調(diào)整規(guī)則包括縮小字號(hào)和放大字號(hào)的規(guī)則。具體而 言,對(duì)于字號(hào)f,每個(gè)字符的寬度在D上下浮動(dòng),f和D基本成正比(可能 由于取整等原因,存在誤差),并且,字號(hào)與行高也同樣存在類似的關(guān)系。 對(duì)此,可以認(rèn)為對(duì)于字號(hào)f,每個(gè)字符會(huì)占據(jù)D"的面積。在這種情況下,假設(shè)字符串的長度為n,這是固定不變的。那么,按f 字號(hào)繪制下來所占用的總面積是nD2。在字符繪制過程中,寬度總是固定 不變,于是可以得到nD<formula>formula see original document page 12</formula>,字號(hào)的平方與高 度成正比?;谏鲜龇治觯趪L試?yán)L制的過程中,當(dāng)目'標(biāo)區(qū)域的大小足夠放下所 有字符串中的具有該字號(hào)的字符時(shí),放大字號(hào)的規(guī)則可以如以下公式所 示<formula>formula see original document page 12</formula>其中,newSize為放大的目標(biāo)字號(hào);oldSize為當(dāng)前的基準(zhǔn)字號(hào),例如, 如果是第一次放大字號(hào),則基準(zhǔn)字號(hào)可能為用戶初始設(shè)置的字號(hào);如果 是第二次放大字號(hào),則基準(zhǔn)字號(hào)為第一次放大后的字號(hào);sqrt()為求平 方根的函數(shù);height是目標(biāo)區(qū)域的高度;Y是Y坐標(biāo)上的位移,相當(dāng)于按
oldSize繪制時(shí)占用的高度。Height大于Y,所以計(jì)算得到的字號(hào)是變大的。 此外,為便于計(jì)算,還可以對(duì)計(jì)算結(jié)果向上取整。相應(yīng)地,在嘗試?yán)L制的過程中,當(dāng)目標(biāo)區(qū)域的大小不夠時(shí),Y接近于 等于height,并且,可能是繪制到字符串的某個(gè)字符(假設(shè)為第i個(gè))而遍 歷循環(huán)被迫中斷。在這種情況下,則可以認(rèn)為,i個(gè)字符占據(jù)了Y,如果 高度不做限制,按照這個(gè)字號(hào)繼續(xù)繪制下去,總共n個(gè)字符將會(huì)占據(jù)高度 H=y/i*n,即y/H^/n,高度比近似于字符個(gè)數(shù)比。因此,可以得到縮小字 號(hào)的規(guī)則,如以下公式所示newSize = oldSize * sqrt (i / n )其中,newSize為放大的目標(biāo)字號(hào);oldSize為當(dāng)前的基準(zhǔn)字號(hào),例如, 如果是第一次放大字號(hào),則基準(zhǔn)字號(hào)可能為用戶初始設(shè)置的字號(hào);如果 是第二次放大字號(hào),則基準(zhǔn)字號(hào)為第一次放大后的字號(hào);sqrt()為求平 方根的函數(shù);i為所繪制字符的個(gè)數(shù);n為所述字符串的實(shí)際字符個(gè)數(shù)。同 時(shí),還可以對(duì)結(jié)果向下取整。因而,在本實(shí)施例中,所述縮小基準(zhǔn)字號(hào)的步驟可以包括以下子步驟子步驟Cl 、根據(jù)所述字符串的實(shí)際字符個(gè)數(shù)和已繪制字符個(gè)數(shù)計(jì)算 縮小系數(shù);子步驟C2 、將所述基準(zhǔn)字號(hào)按照所述縮小系數(shù)進(jìn)行縮小。 所述放大基準(zhǔn)字號(hào)的步驟可以包括以下子步驟 子步驟Dl 、根據(jù)所述目標(biāo)區(qū)域的高度和所繪制字符串的高度計(jì)算放 大系數(shù);子步驟D2、將所述基準(zhǔn)字號(hào)按照所述放大系數(shù)進(jìn)行放大。 在繪制前,根據(jù)上述面積計(jì)算的構(gòu)思,同樣可以取得一個(gè)相對(duì)接近于目 標(biāo)的字號(hào),以減少嘗試?yán)L制的次數(shù)。因而,在嘗試?yán)L制以前,還可以包 括步驟調(diào)整所述基準(zhǔn)字號(hào)。通過執(zhí)行所述步驟,可以對(duì)基準(zhǔn)字號(hào)做一次快速估算處理,從而取 得一個(gè)相對(duì)接近的目標(biāo)字號(hào),對(duì)于所述調(diào)整的方法,由本領(lǐng)域技術(shù)人員 任意采用都是可行的,例如,設(shè)置固定調(diào)整系數(shù),每次調(diào)整都減小一個(gè)
字號(hào);或者,根據(jù)目標(biāo)區(qū)域的大小和字符串的長度設(shè)置調(diào)整系數(shù),通過 該調(diào)整系數(shù)調(diào)整該基準(zhǔn)字號(hào)等都是可行的,本發(fā)明對(duì)此不需要進(jìn)行限定。優(yōu)選的是,在本實(shí)施例中,可以通過以下子步驟調(diào)整所述基準(zhǔn)字號(hào) 子步驟SlOl、判斷所述基準(zhǔn)字號(hào)是否小于或等于0,如果是,則執(zhí) 行子步驟S102;如果否,則從子步驟S103起執(zhí)行后續(xù)步驟; 子步驟S102、將所述基準(zhǔn)字號(hào)置O; 子步驟S103、獲取字符串的總寬度和行高;所述字符串的總寬度和所述基準(zhǔn)字號(hào)的行高可能通過JDK (Java Development Kit, Java開發(fā)工具)的API (應(yīng)用程序接口, Application Programming Interface )獲得,也可以采用現(xiàn)有技術(shù)中的其它方法獲得, 本發(fā)明對(duì)此不作限制。子步驟S104、根據(jù)所述字符串的總寬度和實(shí)際字符個(gè)數(shù)計(jì)算字符的 平均寬度;子步驟S105、根據(jù)所述字符的平均寬度和行高計(jì)算所述字符的平均 單位面積;子步驟S106、計(jì)算目標(biāo)區(qū)域的總面積,將所述總面積與所述字符的 平均單位面積進(jìn)行對(duì)比,獲得所述目標(biāo)區(qū)域的可容字符個(gè)數(shù);子步驟S107、判斷所述可容字符個(gè)數(shù)是否大于或等于所述實(shí)際字符 個(gè)數(shù),如果是,則執(zhí)行子步驟S108;如果否,則執(zhí)行子步驟S109;子步驟S108、保留所述基準(zhǔn)字號(hào);子步驟S109、根據(jù)所述可容字符個(gè)數(shù)與實(shí)際字符個(gè)數(shù)生成調(diào)整系數(shù), 并按照所述調(diào)整系數(shù)調(diào)整所述基準(zhǔn)字號(hào)。在本實(shí)施例中,為實(shí)現(xiàn)快速估計(jì)的目的,所述基準(zhǔn)字號(hào)的調(diào)整過程 為只調(diào)小不調(diào)大的單向調(diào)整過程,此外,通過采用JDK的API計(jì)算字符 串的寬度和行高的耗時(shí)是非常小的,可以有效節(jié)約資源。當(dāng)然,本領(lǐng)域 技術(shù)人員根據(jù)需要或經(jīng)驗(yàn)采用其它調(diào)整字號(hào)的方法都是可行的,本發(fā)明 對(duì)此不需要進(jìn)行限定。為使本領(lǐng)域技術(shù)人員更好地理解本發(fā)明,以下通過舉例具體說明所 述調(diào)整基準(zhǔn)字號(hào)的過程假設(shè)目標(biāo)區(qū)域的大小為80*60,字符串的個(gè)數(shù)為10,基準(zhǔn)字號(hào)為24;
第一步,判斷所述基準(zhǔn)字號(hào)大于O,則通過JDK的API獲得所述字 符串的總寬度為240,行高為27.375;第二步,計(jì)算得到字符的平均寬度為240/10=24;第三步,計(jì)算得到字符的平均單位面積為24*27.375=657;第四步,計(jì)算目標(biāo)區(qū)域的總面積為80*60: 4800;第五步,將所述總面積與所述字符的平均單位面積進(jìn)行對(duì)比 4畫657-7;第六步,獲得所述目標(biāo)區(qū)域內(nèi)的可容字符為7;第七步,判斷所述可容字符個(gè)數(shù)7小于所述實(shí)際字符個(gè)數(shù)10,則根 據(jù)所述可容字符個(gè)數(shù)與實(shí)際字符個(gè)數(shù)生成調(diào)整系數(shù)為sqrt ( 7/10 ) -0.84;第八步,按照所述調(diào)整系數(shù)0.84調(diào)整所述基準(zhǔn)字號(hào)為24*0.84=20。當(dāng)目標(biāo)區(qū)域非常小,以致無法容納一個(gè)平均字寬時(shí),或放不下一行 時(shí),還可以在上述調(diào)整過程中增加按比例縮小的步驟,參考圖2,示出了 本發(fā)明的另 一種字號(hào)調(diào)整方法的流程圖,具體可以包括以下步驟步驟201、判斷基準(zhǔn)字號(hào)size是否小于或等于0,如果是,則將size 置為0,如果否,則執(zhí)行下一步;步驟202、計(jì)算平均字符寬度avgW;所述平均字符寬度avgW:字符串的總寬度/實(shí)際字符個(gè)數(shù);步驟203、判斷所述平均字符寬度avgW是否大于目標(biāo)區(qū)域的寬度 width,如果是,則調(diào)整所述基準(zhǔn)字號(hào)size,調(diào)整計(jì)算的公式為size= size*width/avgW,然后返回步驟201,重新估算所述調(diào)整后的基準(zhǔn)字號(hào); 如果否,則執(zhí)行下一步;步驟204、判斷字符串的行高lineH是否大于目標(biāo)區(qū)域的高度height, 如果是,則調(diào)整所述基準(zhǔn)字號(hào),調(diào)整計(jì)算的公式為size= size*height/lineH,然后返回步驟201,重新估算所述調(diào)整后的基準(zhǔn)字號(hào); 如果否,則執(zhí)行下一步;步驟205、設(shè)置行高系數(shù)lineCount= height/lineH;步驟206、計(jì)算可容納字符個(gè)數(shù)accept=width/avgW*lineCount;步驟207、判斷可容納字符個(gè)數(shù)accept是否小于字符串的實(shí)際字符個(gè) 數(shù)n,如果是,則執(zhí)行下一步,如果否,則當(dāng)前的基準(zhǔn)字號(hào)size作為調(diào)整 后的基準(zhǔn)字號(hào)size;步驟208、按照調(diào)整公式size=size*sqrt ( accept/n )調(diào)整所述基準(zhǔn)字 號(hào),然后返回步驟201重新估算所述調(diào)整后的字號(hào)。為進(jìn)一步說明本發(fā)明,參考圖3,示出了應(yīng)用本發(fā)明的優(yōu)選實(shí)施例進(jìn) 行目標(biāo)區(qū)域內(nèi)的字符串繪制的流程圖,具體可以包括以下步驟步驟301、調(diào)整基準(zhǔn)字號(hào);步驟302、置字號(hào)變動(dòng)范圍初始值toTry = true;可變字號(hào)下限=-1; 可變字號(hào)上限MAX;步驟303、判斷是否嘗試?yán)L制,如果是,則執(zhí)行下一步;如果否,則 繪制所獲得最佳基準(zhǔn)字號(hào)的緩存圖形對(duì)象;步驟304、創(chuàng)建一個(gè)指定高寬的緩存圖形對(duì)象,x坐標(biāo)置O, y坐標(biāo)為 Ascent; jt匕時(shí),toTry = false;breakLoop = false;步驟305、判斷字符串繪制是否未結(jié)束,如果是,則執(zhí)行下一步;如 果否,則執(zhí)行步驟314;步驟306、依次取第i個(gè)字符,x位移字符寬度;步驟307、判斷是否遇到換行符或x超出區(qū)域?qū)挾?,如果是,則執(zhí)行下 一步;如果否,則在緩存圖形對(duì)象的(x, y)位置繪制字符; 步驟308、 x歸O, y位移一個(gè)行高;步驟309、判斷y + Descent的和是否超過區(qū)域高度,如果是,則執(zhí)行 下一步;如果否,則在緩存圖形對(duì)象的(x, y)位置繪制字符;步驟310、判斷當(dāng)前基準(zhǔn)字號(hào)是否小于所述可變字號(hào)上限,如果是, 則執(zhí)行步驟311,如果否,則執(zhí)行步驟312;步驟311、以當(dāng)前基準(zhǔn)字號(hào)的值更新所述可變字號(hào)上限的值,繼續(xù)執(zhí)行下一步;步驟312、縮小當(dāng)前基準(zhǔn)字號(hào);步驟313、判斷可變字號(hào)下限<縮小字號(hào)<可變字號(hào)上限是否成立,即 判斷當(dāng)前基準(zhǔn)字號(hào)是否在字號(hào)變動(dòng)范圍內(nèi),如果是,則發(fā)起重新繪制請(qǐng) 求;如果否,則中斷循環(huán);步驟314、判斷循環(huán)是否未中斷,breakLoop == false,如果是,則執(zhí) 行下一步;如果否,則表示循環(huán)已中斷,返回步驟303重新判斷;
步驟315、判斷當(dāng)前基準(zhǔn)字號(hào)是否大于可變字號(hào)下限,如果是,則執(zhí)行步驟316;如果否,則執(zhí)行步驟317;步驟316、以當(dāng)前基準(zhǔn)字號(hào)的值更新所述可變字號(hào)下限,并記錄相應(yīng) 的緩存圖形對(duì)象,繼續(xù)執(zhí)行下一步;步驟317、判斷當(dāng)前基準(zhǔn)字號(hào)是否小于初始基準(zhǔn)字號(hào),且y不到區(qū)域高 的90%,如果是,則執(zhí)行步驟318;如果否,則返回步驟303重新判斷;步驟318、放大當(dāng)前基準(zhǔn)字號(hào),并執(zhí)行下一步;步驟319、判斷可變字號(hào)下限<放大字號(hào)<可變字號(hào)上限是否成立,即 判斷當(dāng)前基準(zhǔn)字號(hào)是否在字號(hào)變動(dòng)范圍內(nèi),如果是,則發(fā)起重新繪制請(qǐng) 求;如果否,則返回步驟303重新判斷。從上例中可以看出,本發(fā)明在繪制初始,可以先做一次快速估算,以 調(diào)整基準(zhǔn)字號(hào),使其比較接近最終獲得的最佳字號(hào);遍歷字符串每一個(gè) 字符的循環(huán)結(jié)構(gòu)有兩個(gè)出口 ,第一個(gè)出口為正常的循環(huán)結(jié)束,第二個(gè)出 口為強(qiáng)制結(jié)束出口。在繪制過程中,還可以設(shè)置放大字號(hào)的條件,上例 中的高度占滿90%與否僅用于舉例,本領(lǐng)域技術(shù)人員設(shè)置任意條件都是可 行的,本發(fā)明對(duì)此不作限制,這種條件設(shè)置可以有效地減少嘗試?yán)L制的 次數(shù),從而有效提高字符串的繪制效率。為使本領(lǐng)域技術(shù)人員更好地理解本發(fā)明,以下通過具體實(shí)例說明本發(fā) 明在目標(biāo)區(qū)域內(nèi)繪制字符串的優(yōu)選實(shí)施例。假設(shè)目標(biāo)區(qū)域大小為80*60;字符串內(nèi)容為一二三四五六七八九 十,長度為10;基準(zhǔn)字號(hào)為24;(一) 快速估算,調(diào)整基準(zhǔn)字號(hào)(1) 通過JDK的API求得字符串寬度為240;(2) 通過JDK的API求得行高為27.375;(3) 計(jì)算平均字寬240/10=24;(4) 計(jì)算可容字符個(gè)數(shù)總面積/單個(gè)面積=(80*60) / (24*27.375 )=7;(5) 調(diào)整后的基準(zhǔn)字號(hào)為24*sqrt (7/10) =20。(二) 設(shè)置字號(hào)變動(dòng)范圍初始值,其中,可變字號(hào)下限為-1,可變字 號(hào)上限為MAX; (三) 依據(jù)字號(hào)20,行高22.8125進(jìn)行第一次繪制,繪制示意圖如圖4所示;從圖4中可以看出,第9個(gè)字符放不下了,則所繪制的字符個(gè)數(shù)i二8;(四) 記錄可變字號(hào)上限為20;(五) 縮小字號(hào)為:20*sqrt (8/10) =17;(六) 判斷可變字號(hào)下限<縮小后的字號(hào)<最小太大字號(hào),即 -1<17<20,判定成立,則進(jìn)4亍下一步;(七) 依據(jù)字號(hào)17,行高19.39進(jìn)行繪制,繪制后的示意圖如圖5所示; 其中,y=55.78。(八) 記錄可變字號(hào)下限為17;(九) 判斷y/60岣.9269〉90。/。,不需要重新繪制,保留該圖形對(duì)象。不斷更新所述可變字號(hào)下限和可變字號(hào)上限,從而有效提高了獲得目標(biāo) 字號(hào)的字符串的繪制效率;并且,本發(fā)明只要判斷當(dāng)前字號(hào)是否在這個(gè) 變動(dòng)范圍內(nèi),即可確定繪制過程的發(fā)起和結(jié)束,從而減少了繪制過程不 必要的資源浪費(fèi),進(jìn)一步有效提高了繪制效率;再者,本發(fā)明通過預(yù)先 調(diào)整基準(zhǔn)字號(hào)用以繪制,使基準(zhǔn)字號(hào)更為接近目標(biāo)字號(hào),減少了嘗試?yán)L 制的次數(shù),從而進(jìn)一步有效提高了繪制效率;此外,本發(fā)明通過自動(dòng)分 析字符在目標(biāo)區(qū)域中的位置關(guān)系,實(shí)現(xiàn)了自動(dòng)換行和縮小字體填充功能 的并行處理;最后,本發(fā)明技術(shù)實(shí)現(xiàn)簡單,無技術(shù)障礙,無特殊保密算 法,成本和風(fēng)險(xiǎn)4交低。參考圖6,示出了本發(fā)明的一種在目標(biāo)區(qū)域內(nèi)繪制字符串的裝置實(shí)施 例的結(jié)構(gòu)框圖,具體可以包括以下單元預(yù)設(shè)單元601,用于預(yù)設(shè)字號(hào)變動(dòng)范圍,所述字號(hào)變動(dòng)范圍為可變字 號(hào)下限與可變字號(hào)上限所限定的范圍;繪制單元602 ,用于在目標(biāo)區(qū)域內(nèi)按照基準(zhǔn)字號(hào)繪制字符串;第 一判斷單元603,用于判斷所繪制的字符串是否超過所述目標(biāo)區(qū)域 的大小,如果是,則觸發(fā)第一調(diào)整單元604;如果否,則觸發(fā)第二調(diào)整單 元605;
第一調(diào)整單元604,用于在所述基準(zhǔn)字號(hào)小于所述可變字號(hào)上限時(shí),
將所述基準(zhǔn)字號(hào)替換所述可變字號(hào)上限;以及,按照第一預(yù)置規(guī)則縮小 所述基準(zhǔn)字號(hào);
第二調(diào)整單元605,用于在所述基準(zhǔn)字號(hào)大于所述可變字號(hào)下限時(shí), 將所述基準(zhǔn)字號(hào)替換所述可變字號(hào)下限;以及,按照第二預(yù)置規(guī)則放大 所述基準(zhǔn)字號(hào);
第二判斷單元606,用于判斷所述縮小或放大的基準(zhǔn)字號(hào)是否在所述 字號(hào)變動(dòng)范圍內(nèi),如果是,則觸發(fā)所述繪制單元602在所述目標(biāo)區(qū)域內(nèi) 按照所述縮小或放大的基準(zhǔn)字號(hào)重新繪制所述字符串;如果否,則觸發(fā) 保存單元607;
保存單元607,用于保存所述目標(biāo)區(qū)域內(nèi)的字符串繪制結(jié)果。 優(yōu)選的是,所述第一判斷單元進(jìn)一步包括以下子單元 換行子單元,用于在所繪制的字符為換行標(biāo)識(shí)符,或者,所繪制字
符的位移超過所述目標(biāo)區(qū)域的寬度時(shí),位移至所述目標(biāo)區(qū)域的下一個(gè)行
高繪制該字符;
高度判斷子單元,用于判斷所繪制字符串的高度是否超過所述目標(biāo) 區(qū)域的高度,如果是,則為所繪制的字符串超過所述目標(biāo)區(qū)域的大小, 如果否,則為所繪制的字符串未超過所述目標(biāo)區(qū)域的大小。
優(yōu)選的是,在本實(shí)施例中,還可以包括調(diào)整單元,用于調(diào)整所述基 準(zhǔn)字號(hào)。
具體而言,所述調(diào)整單元可以包括以下子單元
初始判斷子單元,用于判斷所述基準(zhǔn)字號(hào)是否小于或等于0,如果是, 則觸發(fā)置零子單元;如果否,則觸發(fā)獲取子單元;
置零子單元,用于將所述基準(zhǔn)字號(hào)置0;
獲取子單元,用于獲取字符串的總寬度和行高;
平均寬度計(jì)算子單元,用于根據(jù)所述字符串的總寬度和實(shí)際字符個(gè) 數(shù)計(jì)算字符的平均寬度;
單位面積計(jì)算子單元,用于根據(jù)所述字符的平均寬度和行高計(jì)算所
述字符的平均單位面積;
可容字符計(jì)算子單元,用于計(jì)算目標(biāo)區(qū)域的總面積,將所述總面積
與所述字符的平均單位面積進(jìn)行對(duì)比,獲得所述目標(biāo)區(qū)域的可容字符個(gè) 數(shù);字號(hào)確定子單元,用于判斷所述可容字符個(gè)數(shù)是否大于或等于所述實(shí)際字符個(gè)數(shù),如果是,則保留所述基準(zhǔn)字號(hào);如果否,則根據(jù)所述可 容字符個(gè)數(shù)與實(shí)際字符個(gè)數(shù)生成調(diào)整系數(shù),并按照所述調(diào)整系數(shù)調(diào)整所 述基準(zhǔn)字號(hào)。對(duì)于裝置實(shí)施例而言,由于其基本相應(yīng)于方法實(shí)施例,所以描述的 比較簡單,相關(guān)之處參見方法實(shí)施例的部分說明即可,本發(fā)明在此不贅 述??梢岳斫獾氖牵景l(fā)明可用于眾多通用或?qū)S玫挠?jì)算系統(tǒng)環(huán)境或配 置中。例如個(gè)人計(jì)算機(jī)、服務(wù)器計(jì)算機(jī)、手持設(shè)備或便攜式設(shè)備、平 板型設(shè)備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、置頂盒、可編程的消 費(fèi)電子設(shè)備、網(wǎng)絡(luò)PC、小型計(jì)算機(jī)、大型計(jì)算機(jī)、包括以上任何系統(tǒng)或 設(shè)備的分布式計(jì)算環(huán)境等等。本發(fā)明可以在由計(jì)算機(jī)執(zhí)行的計(jì)算機(jī)可執(zhí)行指令的 一般上下文中描 述,例如程序模塊。 一般地,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽 象數(shù)據(jù)類型的例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等等。也可以在分布 式計(jì)算環(huán)境中實(shí)踐本發(fā)明,在這些分布式計(jì)算環(huán)境中,由通過通信網(wǎng)絡(luò) 而被連接的遠(yuǎn)程處理設(shè)備來執(zhí)行任務(wù)。在分布式計(jì)算環(huán)境中,程序模塊 可以位于包括存儲(chǔ)設(shè)備在內(nèi)的本地和遠(yuǎn)程計(jì)算機(jī)存儲(chǔ)介質(zhì)中。以上對(duì)本發(fā)明所提供的 一種在目標(biāo)區(qū)域內(nèi)繪制字符串的方法,以及 一種在目標(biāo)區(qū)域內(nèi)繪制字符串的裝置進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具 體個(gè)例對(duì)本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是 用于幫助理解本發(fā)明的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技 術(shù)人員,依據(jù)本發(fā)明的思想,在具體實(shí)施方式
及應(yīng)用范圍上均會(huì)有改變 之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對(duì)本發(fā)明的限制。
權(quán)利要求
1、一種在目標(biāo)區(qū)域內(nèi)繪制字符串的方法,其特征在于,包括預(yù)設(shè)字號(hào)變動(dòng)范圍,所述字號(hào)變動(dòng)范圍為可變字號(hào)下限與可變字號(hào)上限所限定的范圍;在目標(biāo)區(qū)域內(nèi)按照基準(zhǔn)字號(hào)繪制字符串;判斷所繪制的字符串是否超過所述目標(biāo)區(qū)域的大?。蝗绻?,則在所述基準(zhǔn)字號(hào)小于所述可變字號(hào)上限時(shí),將所述基準(zhǔn)字號(hào)替換所述可變字號(hào)上限;以及,按照第一預(yù)置規(guī)則縮小所述基準(zhǔn)字號(hào);如果否,則在所述基準(zhǔn)字號(hào)大于所述可變字號(hào)下限時(shí),將所述基準(zhǔn)字號(hào)替換所述可變字號(hào)下限;以及,按照第二預(yù)置規(guī)則放大所述基準(zhǔn)字號(hào);判斷所述縮小或放大的基準(zhǔn)字號(hào)是否在所述字號(hào)變動(dòng)范圍內(nèi),如果是,則在所述目標(biāo)區(qū)域內(nèi)按照所述縮小或放大的基準(zhǔn)字號(hào)重新繪制所述字符串;如果否,則保存所述目標(biāo)區(qū)域內(nèi)的字符串繪制結(jié)果。
2、 如權(quán)利要求l所述的方法,其特征在于,所述判斷字符串是否超 過所述目標(biāo)區(qū)域的大小的步驟進(jìn)一步包括當(dāng)所繪制的字符為換行標(biāo)識(shí)符,或者,所繪制字符的位移超過所述 目標(biāo)區(qū)域的寬度時(shí),則位移至所述目標(biāo)區(qū)域的下 一 個(gè)行高繪制該字符;判斷所繪制字符串的高度是否超過所述目標(biāo)區(qū)域的高度,如果是, 則為所繪制的字符串超過所述目標(biāo)區(qū)域的大小,如果否,則為所繪制的 字符串未超過所述目標(biāo)區(qū)域的大小。
3、 如權(quán)利要求1或2所述的方法,其特征在于,在字符串繪制步驟 以前,還包4舌調(diào)整所述基準(zhǔn)字號(hào)。
4、 如權(quán)利要求3所述的方法,其特征在于,通過以下子步驟調(diào)整所 述基準(zhǔn)字號(hào)判斷所述基準(zhǔn)字號(hào)是否小于或等于O,如果是,則將所述基準(zhǔn)字號(hào)置 0,如果否,則獲取字符串的總寬度和行高;根據(jù)所述字符串的總寬度和實(shí)際字符個(gè)數(shù)計(jì)算字符的平均寬度; 根據(jù)所述字符的平均寬度和行高計(jì)算所述字符的平均單位面積; 計(jì)算目標(biāo)區(qū)域的總面積,將所述總面積與所述字符的平均單位面積進(jìn)行對(duì)比,獲得所述目標(biāo)區(qū)域的可容字符個(gè)數(shù);判斷所述可容字符個(gè)數(shù)是否大于或等于所述實(shí)際字符個(gè)數(shù),如果是,則保留所述基準(zhǔn)字號(hào);如果否,則根據(jù)所述可容字符個(gè)數(shù)與實(shí)際字符個(gè) 數(shù)生成調(diào)整系數(shù),并按照所述調(diào)整系數(shù)調(diào)整所述基準(zhǔn)字號(hào)。
5、 如權(quán)利要求2所述的方法,其特征在于,所述縮小基準(zhǔn)字號(hào)的步 驟包括根據(jù)所述字符串的實(shí)際字符個(gè)數(shù)和已繪制字符個(gè)數(shù)計(jì)算縮小系數(shù); 將所述基準(zhǔn)字號(hào)按照所述縮小系數(shù)進(jìn)行縮小。
6、 如權(quán)利要求2或5所述的方法,其特征在于,所述放大基準(zhǔn)字號(hào) 的步驟包括根據(jù)所述目標(biāo)區(qū)域的高度和所繪制字符串的高度計(jì)算放大系數(shù); 將所述基準(zhǔn)字號(hào)按照所述放大系數(shù)進(jìn)行放大。
7、 一種在目標(biāo)區(qū)域內(nèi)繪制字符串的裝置,其特征在于,包括 預(yù)設(shè)單元,用于預(yù)設(shè)字號(hào)變動(dòng)范圍,所述字號(hào)變動(dòng)范圍為可變字號(hào)下限與可變字號(hào)上限所限定的范圍;繪制單元,用于在目標(biāo)區(qū)域內(nèi)按照基準(zhǔn)字號(hào)繪制字符串;第 一判斷單元,用于判斷所繪制的字符串是否超過所述目標(biāo)區(qū)域的大小,如果是,則觸發(fā)第一調(diào)整單元;如果否,則觸發(fā)第二調(diào)整單元; 第一調(diào)整單元,用于在所述基準(zhǔn)字號(hào)小于所述可變字號(hào)上限時(shí),將所述基準(zhǔn)字號(hào)替換所述可變字號(hào)上限;以及,按照第一預(yù)置規(guī)則縮小所述基準(zhǔn)字號(hào);第二調(diào)整單元,用于在所述基準(zhǔn)字號(hào)大于所述可變字號(hào)下限時(shí),將 所述基準(zhǔn)字號(hào)替換所述可變字號(hào)下限;以及,按照第二預(yù)置規(guī)則放大所 述基準(zhǔn)字號(hào);第二判斷單元,用于判斷所述縮小或放大的基準(zhǔn)字號(hào)是否在所述字 號(hào)變動(dòng)范圍內(nèi),如果是,則觸發(fā)所述繪制單元在所述目標(biāo)區(qū)域內(nèi)按照所 述縮小或放大的基準(zhǔn)字號(hào)重新繪制所述字符串;如果否,則觸發(fā)保存單 元;保存單元,用于保存所述目標(biāo)區(qū)域內(nèi)的字符串繪制結(jié)果。
8、 如權(quán)利要求7所述的裝置,其特征在于,所述第一判斷單元進(jìn)一 步包括換行子單元,用于在所繪制的字符為換行標(biāo)識(shí)符,或者,所繪制字 符的位移超過所述目標(biāo)區(qū)域的寬度時(shí),位移至所述目標(biāo)區(qū)域的下一個(gè)行高繪制該字符;高度判斷子單元,用于判斷所繪制字符串的高度是否超過所述目標(biāo) 區(qū)域的高度,如果是,則為所繪制的字符串超過所述目標(biāo)區(qū)域的大小, 如果否,則為所繪制的字符串未超過所述目標(biāo)區(qū)域的大小。
9、 如權(quán)利要求7或8所述的裝置,其特征在于,還包括 調(diào)整單元,用于調(diào)整所述基準(zhǔn)字號(hào)。
10、 如權(quán)利要求9所述的裝置,其特征在于,所述調(diào)整單元包括 初始判斷子單元,用于判斷所述基準(zhǔn)字號(hào)是否小于或等于0,如果是,則觸發(fā)置零子單元;如果否,則觸發(fā)獲取子單元;置零子單元,用于將所述基準(zhǔn)字號(hào)置0;獲取子單元,用于獲取字符串的總寬度和行高;平均寬度計(jì)算子單元,用于根據(jù)所述字符串的總寬度和實(shí)際字符個(gè) 數(shù)計(jì)算字符的平均寬度;單位面積計(jì)算子單元,用于根據(jù)所述字符的平均寬度和行高計(jì)算所述字符的平均單位面積;可容字符計(jì)算子單元,用于計(jì)算目標(biāo)區(qū)域的總面積,將所述總面積與所述字符的平均單位面積進(jìn)行對(duì)比,獲得所述目標(biāo)區(qū)域的可容字符個(gè)數(shù);字號(hào)確定子單元,用于判斷所述可容字符個(gè)數(shù)是否大于或等于所述 實(shí)際字符個(gè)數(shù),如果是,則保留所述基準(zhǔn)字號(hào);如果否,則根據(jù)所述可 容字符個(gè)數(shù)與實(shí)際字符個(gè)數(shù)生成調(diào)整系數(shù),并按照所述調(diào)整系數(shù)調(diào)整所 述基準(zhǔn)字號(hào)。
全文摘要
本發(fā)明公開了一種在目標(biāo)區(qū)域內(nèi)繪制字符串的方法,包括預(yù)設(shè)字號(hào)變動(dòng)范圍;在目標(biāo)區(qū)域內(nèi)按照基準(zhǔn)字號(hào)繪制字符串;判斷所繪制的字符串是否超過所述目標(biāo)區(qū)域的大??;如果是,則在所述基準(zhǔn)字號(hào)小于所述可變字號(hào)上限時(shí),將所述基準(zhǔn)字號(hào)替換所述可變字號(hào)上限;以及,按照第一預(yù)置規(guī)則縮小所述基準(zhǔn)字號(hào);如果否,則在所述基準(zhǔn)字號(hào)大于所述可變字號(hào)下限時(shí),將所述基準(zhǔn)字號(hào)替換所述可變字號(hào)下限;以及,按照第二預(yù)置規(guī)則放大所述基準(zhǔn)字號(hào);判斷所述縮小或放大的基準(zhǔn)字號(hào)是否在所述字號(hào)變動(dòng)范圍內(nèi),如果是,則在所述目標(biāo)區(qū)域內(nèi)重新繪制所述字符串。本發(fā)明可以在保證字符串繪制效率的前提下,在目標(biāo)區(qū)域內(nèi)同時(shí)實(shí)現(xiàn)自動(dòng)換行和縮小字體填充處理。
文檔編號(hào)G06F17/25GK101127035SQ20071016389
公開日2008年2月20日 申請(qǐng)日期2007年10月11日 優(yōu)先權(quán)日2007年10月11日
發(fā)明者李馥龍 申請(qǐng)人:金蝶軟件(中國)有限公司