專利名稱:一種文檔加載中圖像異步解碼的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及辦公軟件文檔加載中圖像異步解碼的方法,尤其是針對二進(jìn)制流式文檔格式。
背景技術(shù):
在辦公軟件領(lǐng)域,微軟公司的Office辦公套件,無疑是行業(yè)中的翹楚。其所采用的文檔格式也就成為行業(yè)中默認(rèn)的標(biāo)準(zhǔn)格式。不論國內(nèi)國外,每個試圖開發(fā)辦公軟件的公司,都要必須支持微軟公司所制定的文檔格式,在此基礎(chǔ)上才有可能在辦公軟件領(lǐng)域中占有一席之地。在Office 2007推出之前,Office三大模塊之一的Word都采用的是二進(jìn)制流式存儲方式,生成的文件后綴名為doc。微軟公司為此對外提供了 Word 二進(jìn)制流式存儲的定義規(guī)范,其定義了 doc文件的組織方式、不同對象的各種參數(shù)及存儲位置等等。通過查閱該定義規(guī)范,任何人都可以實(shí)現(xiàn)支持doc文檔的加載、修改及保存等功能。作為doc文檔中的一個非常重要的元素,微軟對圖像對象定義了非常多的參數(shù)來描述其在doc文檔中的信息??傮w來說,doc文檔中的圖像對象主要由兩大部分進(jìn)行描述 圖像本身的數(shù)據(jù)內(nèi)容;對象在文檔中的位置信息等參數(shù)。根據(jù)編碼及存儲方式的不同,圖像有諸如JPEG、BMP、WMF、TIFF等多種類型的文件格式。事實(shí)上,doc文檔中,圖像的數(shù)據(jù)內(nèi)容也是按照不同文件格式的存儲方式進(jìn)行存儲的。對圖像對象的解碼也就是對這兩大部分進(jìn)行分別處理。首先,根據(jù)定義規(guī)范從數(shù)據(jù)流中相應(yīng)的位置讀取出位置信息等參數(shù),存儲在軟件自定義的數(shù)據(jù)結(jié)構(gòu)中;其次,根據(jù)圖像的文件格式,調(diào)用對應(yīng)的文件解碼模塊對數(shù)據(jù)進(jìn)行解碼,依然將解碼的內(nèi)容存儲在軟件自定義的數(shù)據(jù)結(jié)構(gòu)中。目前的辦公軟件,在加載doc文檔時,對圖像對象依然是將對象參數(shù)及圖像數(shù)據(jù)依次進(jìn)行解碼,填充到對應(yīng)的數(shù)據(jù)結(jié)構(gòu)中,然后再進(jìn)行下一步的工作。但是,這樣做的結(jié)果是文檔解析時間過長,尤其是含有很多圖像對象的文檔,通過性能分析工具也能夠發(fā)現(xiàn),圖像數(shù)據(jù)的解碼在整個文檔解析中占有很大的比重。如何通過優(yōu)化圖像對象加載的流程來提高文檔加載的效率和速度,理所當(dāng)然就是一個需要研究的內(nèi)容。
發(fā)明內(nèi)容
為了能夠提高文檔加載的效率和速度,本發(fā)明對圖像對象加載的流程進(jìn)行了優(yōu)化,通過對圖像數(shù)據(jù)在加載時不進(jìn)行解碼,而在需要諸如顯示、文檔修改等需要使用圖像數(shù)據(jù)的情況下再進(jìn)行解碼,實(shí)現(xiàn)圖像數(shù)據(jù)的異步加載,從而優(yōu)化了加載流程,提高了文檔的加載速度。為了實(shí)現(xiàn)上述目的,本發(fā)明包括如下步驟
1)將圖像數(shù)據(jù)生成相應(yīng)的圖像文件,保存在本地計算機(jī)某個目錄中;
2)在文件顯示、保存等需要調(diào)用圖像對象時,對相對應(yīng)的圖像文件進(jìn)行解析。
其中,步驟(1)在doc文檔現(xiàn)有的數(shù)據(jù)結(jié)構(gòu)中添加一個名為“FileName”的字符串變量,用來保存對應(yīng)的圖像文件所在的目錄和文件名稱。在對doc文檔數(shù)據(jù)流解析時,當(dāng)解析到圖像對象時,先按照原始流程對對象參數(shù)進(jìn)行解析,保存到數(shù)據(jù)結(jié)構(gòu)中對應(yīng)的位置中。 當(dāng)解析到數(shù)據(jù)內(nèi)容時,根據(jù)不同的文件格式,生成相應(yīng)的文件并將數(shù)據(jù)內(nèi)容寫入到文件中, 將該文件保存在指定的本地計算機(jī)某個目錄中。同時,將保存文件的目錄及文件名寫入到數(shù)據(jù)結(jié)構(gòu)中的“FileName”變量中。對doc文檔數(shù)據(jù)流中所有的圖像對象,都進(jìn)行上述的操作,直至整個doc文檔被全部解析完畢。文檔加載完畢后,辦公軟件就會顯示文檔內(nèi)容,用戶也可以對文檔進(jìn)行諸如修改、 插入、刪除、保存等任何操作。當(dāng)這些操作涉及到圖像對象時,步驟(2)根據(jù)保存在圖像對象數(shù)據(jù)結(jié)構(gòu)中圖像文件的文件類型,調(diào)用對應(yīng)的解碼程序?qū)υ撐募M(jìn)行解碼,將得到的圖像數(shù)據(jù)存儲在數(shù)據(jù)結(jié)構(gòu)中相應(yīng)的位置,同時將保存在計算機(jī)中的圖像文件永久刪除。其中, 步驟(2)包括
(21)如果該圖像對象數(shù)據(jù)結(jié)構(gòu)中的“FileName”變量不為空值(NULL),則將 "FileName"中存儲的圖像文件進(jìn)行解碼,解碼后的數(shù)據(jù)保存到數(shù)據(jù)結(jié)構(gòu)中相應(yīng)的位置中; 如果“FileName”變量為空值(NULL),則不進(jìn)行任何操作;
(22)永久刪除計算機(jī)中對應(yīng)的圖像文件,并將“FileName”變量置為空值(NULL)。這樣,該圖像對象就和未采用本發(fā)明時所使用的圖像對象完全一致,對其的任何操作都可以正常進(jìn)行,不會有任何的不同。此外,當(dāng)關(guān)閉文檔時,有可能會有一些圖像對象從未被使用,則其在文檔生命周期內(nèi)并不需要解碼。這種情況下,“FileName”變量不為空值(NULL),保存在計算機(jī)中對應(yīng)的圖像文件依然存在。此時,應(yīng)在文檔關(guān)閉操作刪除圖像對象數(shù)據(jù)結(jié)構(gòu)時,永久刪除計算機(jī)中對應(yīng)的圖像文件。本發(fā)明與現(xiàn)有技術(shù)相比,通過對圖像對象數(shù)據(jù)的異步解析,能夠減少用戶等待文檔加載完畢的時間,使得文檔內(nèi)容能夠更快的顯示,提升了用戶的體驗(yàn)。在某些情況下,還可以降低加載文檔所占用的內(nèi)存。本發(fā)明在低配置、低效能的計算機(jī)上,對性能和速度的提升表現(xiàn)的尤為突出。
圖1為本發(fā)明文檔中圖像對象的加載流程; 圖2為本發(fā)明圖像對象中圖像數(shù)據(jù)的解碼流程。
具體實(shí)施例方式為了使本發(fā)明的目的、技術(shù)方案及有益效果更加清楚明白,以下結(jié)合附圖及實(shí)施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。為使本發(fā)明的特征及優(yōu)點(diǎn)得到更清楚的了解,以下結(jié)合附圖,以打開一個微軟doc 文檔為例,作詳細(xì)說明如下。其中,該doc文檔有兩頁內(nèi)容,第一頁有一個JPG格式的圖像對象而第二頁有一個PNG格式的圖像對象。
辦公軟件定義一個名為Graphic的類來存儲圖像對象相關(guān)信息,其有一個類型為 ImpGraphic的對象。ImpGraphic對象中存在一個BitmapEx對象用來存放解碼圖像數(shù)據(jù)內(nèi)容后生成的位圖數(shù)據(jù)。為了實(shí)現(xiàn)本發(fā)明,如圖1所示,首先,在Graphic類中,增加一個INetURLObject 類型的對象,命名為mTempFileURL。并在Graphic類的構(gòu)造函數(shù)中將其初始化為空值 mTempFileURL. SetName(String ())。在進(jìn)入文檔加載流程解析到圖像對象時,先利用已有的方式將圖像參數(shù)寫入到數(shù)據(jù)結(jié)構(gòu)中對應(yīng)的位置中。在本實(shí)例中,從第一個圖像數(shù)據(jù)中得知圖像對象存儲的是一個JPG 格式的圖像。因此,根據(jù)事先定義好的命名規(guī)則生成一個后綴名為JPG的圖像文件,使用對數(shù)據(jù)流的操作方式,將doc文檔數(shù)據(jù)流相應(yīng)的內(nèi)容寫入到該JPG文件中生成一個具體的圖像文件;當(dāng)然也可以按照J(rèn)PG文件的標(biāo)準(zhǔn)定義格式自行編寫生成圖像文件的代碼來實(shí)現(xiàn)此功能。其中,在本實(shí)例中,文件的命名規(guī)則按照如下方式定義
1、在生成圖像文件的函數(shù)中定義一個Static類型的整數(shù)變量nCoimt,其初始值為0;
2、定義一個字符串常量sImageName,將其賦值為“CS2C”;
3、處理到第一個圖像對象時,利用辦公軟件現(xiàn)有的對字符串處理的方式將nCoimt和 SImageName組成一個新的字符串變量sFileName,使其成為“CS2C0” ;
4、每處理一個圖像對象,nCount都加1,再重復(fù)第3步的操作。這樣,通過此命名規(guī)則,就可以保證不論文檔中有多少圖像對象,都不會發(fā)生新生成文件的文件名和已有文件發(fā)生重復(fù)的現(xiàn)象。此外,本發(fā)明還要確定生成的圖像文件保存的位置。該位置可以隨意指定,但應(yīng)能保證圖像文件在使用前不會被修改、刪除等,如在軟件安裝目錄下增加一個隱藏目錄,將所有生成的圖像文件放置在此目錄下。本實(shí)例中,將所生成的圖像文件保存在操作系統(tǒng)的 "Documents and kttings”目錄中,安裝辦公軟件時所生成的目錄中。具體的位置可例如為下
C:\Documents and Settings\Administrator\Application Data\NeoShine0ffice\5\ user\template
將此位置信息保存在一個名為sPathName的字符串常量中,通過增加“\”字符并利用辦公軟件對字符串的操作方式將sPathName和sFileName組合得到一個新的字符串,將其賦值給mTempFileURL變量。在本實(shí)例中,對于第一個圖像對象,得到的mTempFileURL 變量所存儲的內(nèi)容則例如為:C:\Documents and Settings\Administrator\Application Data\NeoShine0ffice\5\user\template\CS2C0. jpg。到此為止,mTempFileURL變量已經(jīng)含有了圖像對象所對應(yīng)的新的圖像文件的目錄和名稱。辦公軟件原有的方式是,將圖像對象的數(shù)據(jù)內(nèi)容調(diào)用相應(yīng)的圖像文件解碼流程(本實(shí)例中,是調(diào)用了 JPG文件的解碼流程)獲得位圖數(shù)據(jù)存放在ImpGraphic對象的BitmapEx 中。本發(fā)明修改了原有的方式,在對mTempFileURL變量賦值完畢后,對數(shù)據(jù)內(nèi)容不進(jìn)行解碼,這樣,BitmapEx就沒有存放位圖數(shù)據(jù)信息,其值為空(NULL)。至此,doc文檔數(shù)據(jù)流中,關(guān)于第一個圖像對象的處理已經(jīng)結(jié)束,可以繼續(xù)進(jìn)行后繼的文檔內(nèi)容加載。對文檔中所有的圖像對象都進(jìn)行如此處理,直到整個文檔加載完畢。本實(shí)例中,第二個圖像對象得到的mTempFileURL變量值則例如為C: \Documents and Settings\Administrator\Application Data\NeoShineOffice\5\user\template\CS2Cl. png0文檔加載完畢后,辦公軟件就會對用戶顯示文檔的第一頁內(nèi)容。對本實(shí)例來說,第一幅圖像對象就會立即顯示。這時,需要對圖像對象所對應(yīng)的圖像文件進(jìn)行解碼等操作,如附圖2所示。辦公軟件的顯示機(jī)制會根據(jù)需要顯示的內(nèi)容,從對應(yīng)的數(shù)據(jù)結(jié)構(gòu)中取出實(shí)質(zhì)內(nèi)容進(jìn)行繪制。在本實(shí)例中,軟件會獲得存儲在LngGraphic對象BitmapEx中的位圖,然后調(diào)用操作系統(tǒng)提供的繪制函數(shù)對位圖進(jìn)行繪制,如Windows平臺下,辦公軟件會調(diào)用Windows下的GDI繪制引擎來繪制位圖。本發(fā)明修改了原有的顯示流程。首先,在顯示機(jī)制得到BitmapEx中的位圖前,判斷LngGraphic對象中mTempFileURL字符串變量是否為空值(NULL),如果為空值,表示圖像已經(jīng)被解碼,則無需額外操作,繼續(xù)按照之前的操作步驟進(jìn)行即可。如果不為空值,說明該圖像對象在文檔解析后還未被使用過,則根據(jù) mTempFileURL變量中的字符串內(nèi)容,采用辦公軟件原有的功能將該圖像文件生成一個流式對象。對該流式對象,利用原有的圖像文件解碼流程對該對象進(jìn)行解碼,生成具體的 BitmapEx對象。將該BitmapEx對象替換ImpGraphic對象中的BitmapEx對象。在此之后,繼續(xù)使用辦公軟件的顯示方式,辦公軟件依然調(diào)用BitmapEx中的位圖進(jìn)行顯示,與原有的流程沒有任何區(qū)別。在設(shè)置完BitmapEx對象后,mTempFileURL所存放的圖像文件就失去了其使用價值。因此,需要將文件刪除,釋放硬盤空間。本實(shí)例采用辦公軟件提供的文件刪除功能將硬盤中存放的圖像文件刪除(本實(shí)例中刪除CS2C0.jpg文件),刪除成功后,將mTempFileURL 變量賦值為空。至此,第一個圖像對象的顯示處理流程修改完畢,辦公軟件可以像本發(fā)明修改之前的方式對圖像對象進(jìn)行任意的操作。在上述操作完成后,辦公軟件就可以顯示出文檔的第一頁內(nèi)容。如果用戶使用鼠標(biāo)或鍵盤等方式來瀏覽第二頁內(nèi)容,辦公軟件則會調(diào)用第二頁的圖像對象用來顯示,此時, 同樣對該圖像對象使用上述的各部操作。本實(shí)例中,會調(diào)用Png圖像文件的解碼流程,以及刪除CS2Cl.png文件。當(dāng)然,還存在有另一種情況,即用戶僅僅瀏覽了第一頁內(nèi)容,就關(guān)閉了文檔。這時, 第二頁的圖像對象并沒有顯示,也沒有對其進(jìn)行任何操作。這種情況下,該圖像對象并沒有進(jìn)行解碼,其mTempFi 1 eURL字符串變量不為空值(NULL),對應(yīng)的圖像文件仍然保存在本地計算機(jī)對應(yīng)的目錄中。此時,在關(guān)閉操作刪除圖像對象數(shù)據(jù)結(jié)構(gòu)時,永久刪除對應(yīng)的圖像文件。事實(shí)上,在文檔的生命周期中,如果存在沒有進(jìn)行任何操作的圖像對象,都采用同一方式進(jìn)行處理。本發(fā)明僅以對Doc格式的文檔的異步解析為例進(jìn)行說明,事實(shí)上所有二進(jìn)制流式 (如DOC,PPT, XLS等相關(guān)格式)文檔的異步解碼都在本發(fā)明解決的范圍內(nèi)。以上所述以中標(biāo)普華Office 5.0來說明本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所做的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種文檔加載中圖像異步解碼的方法,其特征在于在文檔加載過程中,對數(shù)據(jù)流中圖像對象的內(nèi)容數(shù)據(jù)不進(jìn)行解碼處理,而是在圖像所在文檔頁面被操作時,再進(jìn)行解碼; 包括如下步驟.1)將圖像數(shù)據(jù)生成相應(yīng)的圖像文件,保存在本地計算機(jī)具體目錄中;.2)在文件需要調(diào)用圖像對象時,才對相對應(yīng)的圖像文件進(jìn)行解碼。
2.如權(quán)利要求1所述的方法,其特征在于,所述文檔的格式為二進(jìn)制流式文檔格式。
3.如權(quán)利要求2所述的方法,其特征在于,在文檔加載過程中,將文檔數(shù)據(jù)流中所有的圖像對象的內(nèi)容數(shù)據(jù)保存成圖片文件,存儲在計算機(jī)硬盤的臨時目錄中,直至整個文檔被全部解析完畢。
4.如權(quán)利要求3所述的方法,其特征在于,圖片文件有JPG、JPEG、BMP、WMF、TIFF類型的文件格式。
5.如權(quán)利要求2所述的方法,其特征在于,在文檔現(xiàn)有的數(shù)據(jù)結(jié)構(gòu)中添加一個字符串變量,用來保存對應(yīng)的圖片文件所在的目錄和該圖片文件的名稱。
6.如權(quán)利要求5所述的方法,其特征在于,文檔加載完畢后,用戶需要顯示文檔中的圖像對象時,根據(jù)保存在圖像對象數(shù)據(jù)結(jié)構(gòu)中圖像文件的文件類型,調(diào)用對應(yīng)的解碼程序?qū)υ撐募M(jìn)行解碼,將得到的圖像數(shù)據(jù)存儲在數(shù)據(jù)結(jié)構(gòu)中相應(yīng)的位置,同時將保存在計算機(jī)中的圖像文件永久刪除。
7.如權(quán)利要求5所述的方法,其特征在于,用戶對文檔進(jìn)行修改、插入、刪除或保存操作時,根據(jù)保存在圖像對象數(shù)據(jù)結(jié)構(gòu)中圖像文件的文件類型,調(diào)用對應(yīng)的解碼程序?qū)υ撐募M(jìn)行解碼,將得到的圖像數(shù)據(jù)存儲在數(shù)據(jù)結(jié)構(gòu)中相應(yīng)的位置,同時將保存在計算機(jī)中的圖像文件永久刪除。
全文摘要
本發(fā)明公開了一種文檔加載中圖像異步解碼的方法,該方法在二進(jìn)制流式文檔加載中,對數(shù)據(jù)流中圖像對象的內(nèi)容數(shù)據(jù)不進(jìn)行解碼處理,將內(nèi)容數(shù)據(jù)保存成相應(yīng)格式的圖片文件存儲在計算機(jī)硬盤的臨時目錄中,在對象顯示等需要對內(nèi)容進(jìn)行解碼時,再調(diào)用解碼程序進(jìn)行解碼。本發(fā)明的方法具有通用性,解決了二進(jìn)制流式文檔加載中圖像解碼占用時間比例大的問題,提高了文檔的加載和顯示速度。
文檔編號G06F17/30GK102567460SQ20111037292
公開日2012年7月11日 申請日期2011年11月22日 優(yōu)先權(quán)日2011年11月22日
發(fā)明者史周波, 孫亦南 申請人:中標(biāo)軟件有限公司