《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 其他 > 業(yè)界動(dòng)態(tài) > “中國眼”全功能看圖軟件

“中國眼”全功能看圖軟件

J2SE在桌面系統(tǒng)的應(yīng)用
2009-01-08
作者:張穎

1. 引言?

??? JAVA是開發(fā)服務(wù)器,個(gè)人應(yīng)用,移動(dòng)設(shè)備的極好的技術(shù)。因?yàn)?a class="innerlink" href="http://ihrv.cn/tags/跨平臺" title="跨平臺" target="_blank">跨平臺的需要使得JAVA在服務(wù)器和移動(dòng)設(shè)備方面非常成功?,F(xiàn)在雖然在個(gè)人電腦方面還不是很令人滿意,但JAVA正在以比你想像還快的速度改進(jìn)著。在這篇論文中,我將分析JAVA將怎樣改變現(xiàn)在的桌面世界,然后展示用標(biāo)準(zhǔn)J2SE構(gòu)建的全功能看圖軟件。

.桌面系統(tǒng)和JAVA?

??? 現(xiàn)在主流的桌面平臺是:Windows,Mac和Linux。它們都不是完美的。Windows統(tǒng)治著桌面市場,有著大量的應(yīng)用軟件和開發(fā)者,但很多要花錢,并且存在安全漏洞;Linux有著安全基礎(chǔ),并且是開源的,但沒有Windows用起來那么順手;Mac非常好用,也不是像Windows那樣成為黑客攻擊的對象,但其硬件、軟件的選擇比Windows和Linux要受限制的多。公司和個(gè)人選擇操作系統(tǒng)是要考慮很多因素的:盡量低的價(jià)格,盡量高的安全性占第一位,這讓很多人轉(zhuǎn)向了Linux(比如中國的軍用平臺就只能用Linux)。友好的使用環(huán)境,大量的應(yīng)用軟件使得Windows仍然占用很大的市場份額。Mac有著忠實(shí)的用戶。日益健壯的Linux市場,還有Mac的中興使得它們都大力運(yùn)用JAVA技術(shù),以便成為更加重要得桌面系統(tǒng)。

.跨平臺支持?

??? JAVA能在所以相關(guān)平臺上運(yùn)行,如果哪個(gè)組織想不改變軟件的現(xiàn)有代碼就能跨平臺使用,那么JAVA就是最好得桌面開發(fā)平臺。也許用Microsoft得可視化開發(fā)工具創(chuàng)建.NET程序很輕松,但這會(huì)使你局限于Windows平臺。如果你用JAVA開發(fā)應(yīng)用程序,你不會(huì)因?yàn)榇a重構(gòu)引起麻煩。JAVA的GUI能夠在各種平臺上看起來一樣,也能根據(jù)需要模擬平臺樣式。JAVA的安全性也是有目共睹的,這省去了不少后期維護(hù)工作。Sun公司桌面系統(tǒng)的推出,JDK1.5的升級,這給了廣大的JAVA開發(fā)者一個(gè)很好的機(jī)遇和挑戰(zhàn)。隨著JAVA技術(shù)的不斷成熟和多種IDE軟件的出現(xiàn),開發(fā)出的JAVA應(yīng)用軟件會(huì)更友好,開發(fā)周期也會(huì)更短,維護(hù)也更為方便。

.成功典范?

????Borland公司的JBuilder開發(fā)環(huán)境;NetBean組織的NetBean,以及IBM公司的Ecllipse。這些都是大型的桌面開發(fā)軟件,還有很多跟廣大計(jì)算機(jī)用戶密切相關(guān)的軟件,如永中Office,JFtp,Robocode,JLGui等等。

2. 實(shí)例分析?

.項(xiàng)目描述?

???“中國眼” 是北信JAVA實(shí)驗(yàn)室用純JAVA語言寫成的、成功的看圖軟件。它運(yùn)用了JAVA天然的跨平臺特性;融合了XML,多線程,css,javascript等多種技術(shù);支持BMP,XMP,JPG,JPEG,GIF,PNG,PCX。并且有很強(qiáng)的安全性和穩(wěn)健性。軟件只有400多K,很方便在網(wǎng)上傳輸。運(yùn)行環(huán)境為J2SE1.4以上。軟件已經(jīng)在Windows 98,2000,XP,2003,Linux RedHat9 通過了測試。

??? 它具有看圖,圖片處理,格式轉(zhuǎn)換,文件管理等多種功能。能幻燈片放映,圖像渲染(柔化,銳化,亮化,暗化,浮雕化等),以極快速度縮放,重命名,屏幕取色,圖像翻轉(zhuǎn),圖像裁剪,創(chuàng)建"我的相冊簿",全屏看圖,支持鼠標(biāo)拖拽裝入圖片。

?? 說到圖像處理,也許有人會(huì)想到用JAI(Java Advanced Imaging),但這會(huì)使得那些沒有安裝這個(gè)包的人很被動(dòng),而且這個(gè)包處于β版,性能不穩(wěn)定,所以在該軟件中沒有用JAI。

?? “中國眼”的圖像處理速度,它的小巧,它的強(qiáng)大功能會(huì)給用戶留下深刻映象。并且它是免費(fèi)的。

圖一:“中國眼”的系統(tǒng)層次

??? 對于Swing主件的繪圖設(shè)置,最好用paintComponent,這樣能夠用缺省的雙緩沖機(jī)制。

圖二:“中國眼”的圖形顯示

??? 看圖軟件要是沒有幻燈片放映會(huì)很遜色的,而JAVA幻燈片放映的實(shí)現(xiàn)是離不開線程的,不過線程的開始停止用那些supend,或者是stop 是不安全的,所以在run里面用循環(huán)變量來控制是比較好的選擇,下面是SlideShow:

public class slideshow extends Thread{?

public void run(){?? ??

while(slideshowbegin==true)

?????????? try{ cycleloadImage(KeyEvent.VK_SPACE);

??????????? ??????? if(slideshowbegin==false) break;

??? ??????????????? Thread.sleep(2000);//停止2000ms}

??????????? catch(InterruptedException e) {System.out.println(e.toString());}

}}

??? 對圖像文件的處理少不了要存儲(chǔ)一些圖像信息,比如說你要?jiǎng)?chuàng)建個(gè)人相冊簿,那么少不了對圖像發(fā)生年代、背景的記述。Java于XML的結(jié)合使得這樣的這變得很容易處理。

public static Document createDomDocument(String imagepath,String description)

{?? Document doc=parseXmlFile()

Element element; //加入根節(jié)點(diǎn)元素

if(doc.hasChildNodes()){element=doc.ge tDocumentElement();}

else{

element = doc.createElement("Description");

doc.appendChild(element);

Comment comment = doc.createComment("以下是各個(gè)圖像的描述信息");

//對元素節(jié)點(diǎn)插入comment

doc.insertBefore(comment, element);

}

String xpath = "http://*[@path='"+imagepath+"']";

try{? // 得到匹配的元素

NodeList nodelist = org.apache.xpath.XPathAPI.selectNodeList(doc, xpath);

//處理節(jié)點(diǎn)表中的元素

if(nodelist.getLength()!=0)element.removeChild((Element)nodelist.item(0));

}

catch(javax.xml.transform.TransformerExceptione){System.out.println(e.toString());}

Element imageinfo=doc.createElement("ImageInfo");//創(chuàng)建元素節(jié)點(diǎn)

element.appendChild(imageinfo);

imageinfo.setAttribute("path",imagepath);//設(shè)置元素屬性,用圖像路徑來表示

imageinfo.appendChild(doc.createTextNode(description));

return doc;

}

sun.awt.shell.ShellFolder sf= sun.awt.shell.ShellFolder.getShellFolder(file);

ImageIcon icon= new ImageIcon(sf.getIcon(true), sf.getFolderType());

得到文件的系統(tǒng)圖標(biāo),這樣就不會(huì)使人們在不同平臺下使用本軟件時(shí)感到陌生,這也是Java L&F的最好表達(dá)。

圖三:圖形的通用界面????????????????????? 圖四:圖形的柔化

??? 對應(yīng)每種圖像處理建立不同的處理類,都放在ImageProcess包下。圖形的柔化處理用了JAVA內(nèi)建的卷積類:

//一個(gè)圖像柔化就是把每一個(gè)象素和它周圍的8個(gè)象素平均

float weight = 1.0f/9.0f;

float[] elements = new float[9];

for (int i = 0; i < 9; i++)elements[i] = weight;

Kernel kernel = new Kernel(3, 3,elements);

BufferedImageOp op = new ConvolveOp(kernel);

3.總結(jié)和展望?

JAVA初衷是為在瀏覽器上運(yùn)行APPLET而創(chuàng)建的網(wǎng)絡(luò)技術(shù),但它通用有能力在桌面系統(tǒng)運(yùn)行的非常好,就那“中國眼”看圖軟件來說,經(jīng)過測試,縮放同樣的圖像,花費(fèi)的時(shí)間比ACDSee,以及IrfanView快的多,穩(wěn)定性好。不要忘了它還有最大的優(yōu)勢就是跨平臺的。這也是“Write Once, Run Anywhere”的最好應(yīng)證。

參考文獻(xiàn)

[1] java.sun.com

[2] http://www.onjava.com/pub/a/onjava

[3] http://community.java.net/javadesktop

[4] http://www-106.ibm.com/developerworks/java/

[5] Philip Brow? www.bolthole.com? n

[6] Matthias ?www.burgsoft.de

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。