電子紙閱讀器的PPT格式引擎設計和優(yōu)化
3 軟件設計
本設計以嵌入式多格式解析引擎系統(tǒng)架構為基礎。解析引擎是負責對源文件進行解析,生成中間格式需要的數(shù)據(jù)的模塊。
解析引擎的內部架構如圖2所示。
3.1 語法分析器
語法分析器為輸入流數(shù)據(jù),輸出為結構化數(shù)據(jù)供各模塊使用。PPT格式的記錄采用id-value結構,id和value占據(jù)規(guī)定的字節(jié)數(shù),語法分析器負責識別記錄id,并抽取value。
3.2 導航器
負責把數(shù)據(jù)從文件系統(tǒng)調入內存,并把I/O流轉換成結構化數(shù)據(jù),即用DOM結構描述文件的整體架構。
該模塊具有頁面導航作用。PPT使用OLE2組合文檔存儲。容器和結點只存儲粗粒度索引信息,對于不需要立即顯示的頁,只存儲容器結點,暫時不展開,需要顯示該頁時,再從該結點向下展開,從而減少了不必要的文件讀取。這種分層裝載方法,提高了打開速度,并且對于大文檔,進入速度只和第一頁的復雜程度有關。
此外,為了更好地索引,建立了一系列的鏈表結構。如:數(shù)據(jù)塊索引表、根目錄表、圖像數(shù)據(jù)流鏈表、用戶反向鏈表、文本鏈、母板鏈表等。
文件長度、版本號、進行文件合法性等信息通過讀取初始化塊獲得。除此之外還需要初始化幾個重要的全局鏈表。
①數(shù)據(jù)塊索引表。文件以塊為單位存儲,且不連續(xù),數(shù)據(jù)所屬塊號和塊內偏移量可以方便地進行尋址操作。
②構建根目錄表,包括存儲內容的起始塊號和大小,用于尋址操作。讀操作只在當前塊范圍內,當超出當前塊可讀長度時,通過查詢塊索引表找到下一塊的塊號。
③構建圖像數(shù)據(jù)流鏈表。
④構建用戶反向鏈表。為了快速保存,PPT采用增量式存儲,即每次保存時,直接生成頁面副本并追加到文檔末尾。增量式存儲的缺點是冗余量大。例如,有的文件只有幾頁,但文件大小幾MB甚至幾十MB,文件實際大小和修改次數(shù)有關。
⑤幻燈片文本鏈,流信息到排版元數(shù)據(jù)獨立存儲。純文本存儲在文本流中,存儲以及排版信息存儲在頁數(shù)據(jù)區(qū)。頁數(shù)據(jù)區(qū)還存儲了純文本在文本流中的位置。
⑥母板鏈表,母板一般作為背景,以頁為單位順次存儲。因為電子紙顯示灰度圖像,背景和正文疊加以后看不清楚,用戶閱讀時可以去除背景,而不會影響到文件本身。
增量式存儲的基本思想是:每次修改產生一個用戶信息,存儲修改的塊號,當前用戶信息反向指向上一個用戶信息,從而構成一個用戶反向鏈。遍歷用戶反向鏈可以找到最后一次修改。冗余數(shù)據(jù)可以直接丟棄。
3.3 布局管理器
負責屏幕劃分和圖層管理,布局管理器劃為不同的矩形區(qū)域,并標識該區(qū)域的類型。然后分別將解析得到的文字,圖形,圖像緩沖區(qū)映射到屏幕位圖上。
3.4 文字處理器
PPT格式的文字種類和布局相對復雜,可以分為正文和圖形內嵌文字兩種,各級標題正文的布局也有要求。文字處理器針對各種文本的排版格式多樣性進行解析和布局,完整再現(xiàn)原文檔的版式信息。
文字處理過程分為預排版和頁面排版兩部分,預排版負責填充字模緩沖區(qū),抽取字符編碼和字體信息作為FreeType的輸入,用生成的單個字模位圖填充緩沖區(qū)。然后結合標尺和對其方式把映射到頁面顯示緩沖區(qū)。文字解析原理圖如圖3所示。
3.5 圖形渲染
負責圖形繪制和組合圖形坐標空間轉換。本解析引擎不依賴于圖形服務器,擁有專用的矢量圖形繪制庫。能夠將圖形直接繪制到頁面位圖中,與物理顯示無關。
繪制直線,曲線和多邊形填充分別采用了經典的Breshman算法,三次貝塞爾曲線畫線算法,列掃描多邊形填充算法3種成熟算法。為了提高了運算效率,對于浮點數(shù)作取整運算。經驗證,在浮點數(shù)運算效率不佳的嵌入式系統(tǒng)上也能到達較好的渲染效果。
組合圖形(Drawing Group)包含了一組圖形對象,采用了Dom結構。子結點使用相對于父結點的坐標空間。因此,圖形處理能夠遞歸地進行坐標轉化,并把圖形繪制在其父結點的坐標空間內。
評論