杜琳
摘要:隨著計(jì)算機(jī)技術(shù)的發(fā)展,電子圖片數(shù)據(jù)已經(jīng)成為人們傳遞信息的主要媒介,其規(guī)模和數(shù)量均呈現(xiàn)爆炸式的增長(zhǎng)。如何在大量圖片集合中快速預(yù)覽便成了急需解決的問題。該文提出了一種基于多線程的圖片快速預(yù)覽方法,通過采用為原始圖片構(gòu)造縮略圖,和實(shí)時(shí)監(jiān)測(cè)縮略圖緩存與智能成像預(yù)測(cè)處理,既保證圖片預(yù)覽中用戶對(duì)于圖片質(zhì)量的要求,也保證了圖片預(yù)覽過程中的平滑性和流暢性。
關(guān)鍵詞:圖片預(yù)覽;多線程;快速預(yù)覽;圖片成像;圖片緩存
中圖分類號(hào):TP391 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2016)33-0078-02
Abstract: With the development of computer technology, electronic picture data has become the main medium for people to transmit information, and the scale and quantity of them have exploded. How to quickly preview in a large collection of pictures has become an urgent need to solve the problem. This paper presents a fast preview method based on multi-thread. By constructing thumbnails for the original pictures and real-time monitoring of thumbnail caching and intelligent image prediction processing, it not only ensures the quality of pictures in the preview, but also ensures the Smoothness and fluency in picture preview.
Key words: picture preview; multi-thread; quick preview; image imaging; picture cache
隨著網(wǎng)絡(luò)技術(shù)和Internet的發(fā)展,電子圖片數(shù)據(jù)已經(jīng)成為計(jì)算機(jī)及其他信息存儲(chǔ)介質(zhì)中的重要組成部分,特別是近來便攜設(shè)備、智能終端的普及,家庭圖片總量和類型呈現(xiàn)爆炸式的增長(zhǎng)。據(jù)統(tǒng)計(jì),現(xiàn)今圖像以及視頻等多媒體資源已經(jīng)超過了網(wǎng)絡(luò)中各類信息的四分之一。圖像由于能夠直觀地反映出豐富而有趣的信息,成為了當(dāng)今信息傳播中的熱門媒介,因此,如何在大量圖片集合中快速預(yù)覽便成了急需解決的問題。目前市面上的一些軟件,在百級(jí)數(shù)量上的圖片預(yù)覽效果尚可,一旦達(dá)到千級(jí)或以上數(shù)量級(jí)的圖片集合時(shí),成像以及預(yù)覽的速度都大打折扣,不能滿足用戶快速預(yù)覽的要求。
由于圖片的快速預(yù)覽有著很高的實(shí)用性以及潛在商業(yè)價(jià)值,因此受到了研究人員的廣泛關(guān)注。就連windows操作系統(tǒng)也在一代又一代的系統(tǒng)更新中不斷強(qiáng)化著預(yù)覽功能的性能,可當(dāng)同一文件夾下圖片數(shù)量達(dá)到上千、上萬甚至更多,其預(yù)覽功能就出現(xiàn)了明顯的“遲鈍感”,圖片的成像需要較長(zhǎng)的等待時(shí)間才可完成??追蓖1]提出了目前主流的數(shù)字圖像處理技術(shù),用以提高大規(guī)模圖片處理時(shí)的性能,為實(shí)時(shí)圖像處理提供了一個(gè)解決途徑;李燃等[2]介紹了自主開發(fā)了一套圖像系統(tǒng),解決了圖像瀏覽技術(shù)方面的一些問題,但缺乏對(duì)大規(guī)模的圖片集合處理的論述與實(shí)踐;李潔[3]采用了多線程的方法展示了多媒體信息,但方法單一,不足以滿足性能的要求。李平等[4]改進(jìn)了IOS開發(fā)包中UIScrollView類實(shí)現(xiàn)了預(yù)覽大量圖片,降低內(nèi)存消耗的方法,由于依賴了特定開發(fā)包,并不通用。本文提出了一種通用的基于多線程的圖片快速預(yù)覽方法,通過采用為原始圖片構(gòu)造縮略圖,和實(shí)時(shí)監(jiān)測(cè)縮略圖緩存與智能成像預(yù)測(cè)處理,既保證圖片預(yù)覽中用戶對(duì)于圖片質(zhì)量的要求,也保證了圖片預(yù)覽過程中的平滑性和流暢性。
1 基本原理
1.1 多線程圖片成像
用戶能夠看到圖片,首先需要圖片的成像。由于圖片成像的速度很大程度取決于原始圖片的大小,原始圖片越小,成像繪制越快,原始圖片越大,成像越慢,CPU、內(nèi)存等資源耗費(fèi)也越多。因此,用尺寸較小的縮略圖代替原始圖片進(jìn)行預(yù)覽成像,可以提高圖片預(yù)覽的速度。同時(shí)生成的縮略圖可重用,除首次預(yù)覽需要構(gòu)造原始圖片的縮略圖,之后的預(yù)覽操作都將復(fù)用已有縮略圖,以加快圖片預(yù)覽?;谟脩魧?duì)圖片預(yù)覽的普遍需求和目前市面上大量軟件應(yīng)用的尺寸選擇,本文采用了兩種尺寸為原始圖片構(gòu)造縮略圖,并由不同的線程分別處理,以加快效率。
1)75像素的迷你尺寸,線程1負(fù)責(zé)生成;
2)600像素的大尺寸圖像分辨率,線程2負(fù)責(zé)生成。
以上尺寸均為圖像同比例縮放后最長(zhǎng)邊單位,以達(dá)到圖片預(yù)覽對(duì)展示時(shí)間和圖像質(zhì)量的要求。
在成像尺寸的選擇上,使用以下規(guī)則:
1)默認(rèn)使用迷你尺寸縮略圖填充圖片預(yù)覽框,保證用戶在最短時(shí)間內(nèi)看到成像;
2)若默認(rèn)的圖片預(yù)覽框大于迷你尺寸,或在用戶有放大展示的需求(選擇大尺寸預(yù)覽)時(shí),變換為相應(yīng)大尺寸圖像的縮略圖填充,以保證圖片的清晰度;
3)在縮略圖的構(gòu)造過程中,賦予其不同優(yōu)先級(jí)調(diào)度,保證迷你尺寸的圖片預(yù)覽形式優(yōu)先完成。
1.2 實(shí)時(shí)監(jiān)測(cè)圖片緩存
當(dāng)預(yù)覽圖片的集合達(dá)到上千、上萬甚至更多時(shí),圖片的成像操作將占據(jù)大量的內(nèi)存,在內(nèi)存總量有限的情況下,可用內(nèi)存越少,將會(huì)嚴(yán)重的制約圖片的成像速度,如何釋放冗余的內(nèi)存占用將決定著圖片預(yù)覽的流暢性和平滑性。本文提出對(duì)縮略圖成像緩存進(jìn)行實(shí)時(shí)檢測(cè),以保證內(nèi)存占用控制在一定范圍,同時(shí)根據(jù)預(yù)測(cè)用戶下一步的操作,選擇釋放冗余內(nèi)存。因此,在用戶滾動(dòng)鼠標(biāo)或滑塊,改變視窗,查看更多圖片時(shí),應(yīng)采用:
1)對(duì)已成像圖片緩存進(jìn)行記錄,保證后期新圖片的縮略圖生成有足夠空間,線程3負(fù)責(zé);
2)當(dāng)界面存在多個(gè)帶滑塊的預(yù)覽視區(qū),每個(gè)預(yù)覽視區(qū)內(nèi)展示的圖片集合即稱為一個(gè)圖片目錄邏輯樹。各視區(qū)獨(dú)立計(jì)算自身目錄邏輯樹的圖片成像和釋放方法。在計(jì)算的過程中,需要進(jìn)行當(dāng)前視區(qū)矩形與預(yù)測(cè)視窗矩形的比對(duì)。其中當(dāng)前視區(qū)矩形是指用戶當(dāng)前在屏幕上預(yù)覽的圖片集合的矩形窗口。預(yù)測(cè)視窗矩形是根據(jù)一定的規(guī)則(包括用戶習(xí)慣,圖片相鄰距離等因素綜合考慮),推測(cè)用戶即將預(yù)覽的圖片集合,并以目前視窗中圖片尺寸排列的樣式計(jì)算出展示這些圖片集合需要的矩形窗口。比對(duì)規(guī)則如下:
①計(jì)算當(dāng)前視區(qū)矩形與預(yù)測(cè)視窗矩形的差集,若預(yù)測(cè)視窗矩形中不含當(dāng)前視區(qū)矩形中的元素即為可能需要成像的圖片,即可優(yōu)先為其成像。線程4負(fù)責(zé)。
②已成像圖像若不在兩視窗矩形的差集中,需釋放其資源。線程5負(fù)責(zé)。
其中,線程4調(diào)度級(jí)別高于線程5,以保證圖像生成的處理時(shí)間。
2 圖片快速預(yù)覽系統(tǒng)實(shí)現(xiàn)
基于上述方法,本文使用C#語言編程實(shí)現(xiàn)了一個(gè)圖片快速預(yù)覽系統(tǒng),如下圖所示。在用戶查看圖片和滾動(dòng)滑動(dòng)塊進(jìn)一步預(yù)覽時(shí),可快速成像圖片,避免了預(yù)覽過程的“遲鈍感”,提高了圖片預(yù)覽的效率。
3 結(jié)束語
本文采用多線程并行工作的方式,實(shí)現(xiàn)圖片的快速預(yù)覽,一方面保證了圖片成像的速度和質(zhì)量,另一方面也考慮到系統(tǒng)內(nèi)存的優(yōu)化處理,保證圖片預(yù)覽過程中的操作流暢性和平滑性,在實(shí)際應(yīng)用中有著一定的指導(dǎo)作用。
參考文獻(xiàn):
[1] 孔繁庭. 數(shù)字圖像處理技術(shù)的現(xiàn)狀及發(fā)展方向研究[J]. 電子制作, 2015(3).
[2] 李燃, 吳曉艷. 基于市場(chǎng)需求的win8圖片瀏覽系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 品牌:下半月,2015(7).
[3] 李潔. 數(shù)字化校園多媒體信息管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D]. 成都: 電子科技大學(xué), 2013.
[4] 李平, 鄒振宇. 蘋果iOS中滾動(dòng)視圖類(UIScrollView)的循環(huán)以及動(dòng)態(tài)加載圖片的算法[J]. 電腦與電信, 2011(10).