《电子技术应用》
您所在的位置:首页 > 其他 > 业界动态 > “中国眼”全功能看图软件

“中国眼”全功能看图软件

J2SE在桌面系统的应用
2009-01-08
作者:张颖

1. 引言 

    JAVA是开发服务器,个人应用,移动设备的极好的技术。因为跨平台的需要使得JAVA在服务器和移动设备方面非常成功。现在虽然在个人电脑方面还不是很令人满意,但JAVA正在以比你想像还快的速度改进着。在这篇论文中,我将分析JAVA将怎样改变现在的桌面世界,然后展示用标准J2SE构建的全功能看图软件。

.桌面系统和JAVA 

    现在主流的桌面平台是:Windows,Mac和Linux。它们都不是完美的。Windows统治着桌面市场,有着大量的应用软件和开发者,但很多要花钱,并且存在安全漏洞;Linux有着安全基础,并且是开源的,但没有Windows用起来那么顺手;Mac非常好用,也不是像Windows那样成为黑客攻击的对象,但其硬件、软件的选择比Windows和Linux要受限制的多。公司和个人选择操作系统是要考虑很多因素的:尽量低的价格,尽量高的安全性占第一位,这让很多人转向了Linux(比如中国的军用平台就只能用Linux)。友好的使用环境,大量的应用软件使得Windows仍然占用很大的市场份额。Mac有着忠实的用户。日益健壮的Linux市场,还有Mac的中兴使得它们都大力运用JAVA技术,以便成为更加重要得桌面系统。

.跨平台支持 

    JAVA能在所以相关平台上运行,如果哪个组织想不改变软件的现有代码就能跨平台使用,那么JAVA就是最好得桌面开发平台。也许用Microsoft得可视化开发工具创建.NET程序很轻松,但这会使你局限于Windows平台。如果你用JAVA开发应用程序,你不会因为代码重构引起麻烦。JAVA的GUI能够在各种平台上看起来一样,也能根据需要模拟平台样式。JAVA的安全性也是有目共睹的,这省去了不少后期维护工作。Sun公司桌面系统的推出,JDK1.5的升级,这给了广大的JAVA开发者一个很好的机遇和挑战。随着JAVA技术的不断成熟和多种IDE软件的出现,开发出的JAVA应用软件会更友好,开发周期也会更短,维护也更为方便。

.成功典范 

    Borland公司的JBuilder开发环境;NetBean组织的NetBean,以及IBM公司的Ecllipse。这些都是大型的桌面开发软件,还有很多跟广大计算机用户密切相关的软件,如永中Office,JFtp,Robocode,JLGui等等。

2. 实例分析 

.项目描述 

   “中国眼” 是北信JAVA实验室用纯JAVA语言写成的、成功的看图软件。它运用了JAVA天然的跨平台特性;融合了XML,多线程,css,javascript等多种技术;支持BMP,XMP,JPG,JPEG,GIF,PNG,PCX。并且有很强的安全性和稳健性。软件只有400多K,很方便在网上传输。运行环境为J2SE1.4以上。软件已经在Windows 98,2000,XP,2003,Linux RedHat9 通过了测试。

    它具有看图,图片处理,格式转换,文件管理等多种功能。能幻灯片放映,图像渲染(柔化,锐化,亮化,暗化,浮雕化等),以极快速度缩放,重命名,屏幕取色,图像翻转,图像裁剪,创建"我的相册簿",全屏看图,支持鼠标拖拽装入图片。

   说到图像处理,也许有人会想到用JAI(Java Advanced Imaging),但这会使得那些没有安装这个包的人很被动,而且这个包处于β版,性能不稳定,所以在该软件中没有用JAI。

   “中国眼”的图像处理速度,它的小巧,它的强大功能会给用户留下深刻映象。并且它是免费的。

图一:“中国眼”的系统层次

    对于Swing主件的绘图设置,最好用paintComponent,这样能够用缺省的双缓冲机制。

图二:“中国眼”的图形显示

    看图软件要是没有幻灯片放映会很逊色的,而JAVA幻灯片放映的实现是离不开线程的,不过线程的开始停止用那些supend,或者是stop 是不安全的,所以在run里面用循环变量来控制是比较好的选择,下面是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());}

}}

    对图像文件的处理少不了要存储一些图像信息,比如说你要创建个人相册簿,那么少不了对图像发生年代、背景的记述。Java于XML的结合使得这样的这变得很容易处理。

public static Document createDomDocument(String imagepath,String description)

{   Document doc=parseXmlFile()

Element element; //加入根节点元素

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

else{

element = doc.createElement("Description");

doc.appendChild(element);

Comment comment = doc.createComment("以下是各个图像的描述信息");

//对元素节点插入comment

doc.insertBefore(comment, element);

}

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

try{  // 得到匹配的元素

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

//处理节点表中的元素

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");//创建元素节点

element.appendChild(imageinfo);

imageinfo.setAttribute("path",imagepath);//设置元素属性,用图像路径来表示

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());

得到文件的系统图标,这样就不会使人们在不同平台下使用本软件时感到陌生,这也是Java L&F的最好表达。

图三:图形的通用界面                      图四:图形的柔化

    对应每种图像处理建立不同的处理类,都放在ImageProcess包下。图形的柔化处理用了JAVA内建的卷积类:

//一个图像柔化就是把每一个象素和它周围的8个象素平均

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.总结和展望 

JAVA初衷是为在浏览器上运行APPLET而创建的网络技术,但它通用有能力在桌面系统运行的非常好,就那“中国眼”看图软件来说,经过测试,缩放同样的图像,花费的时间比ACDSee,以及IrfanView快的多,稳定性好。不要忘了它还有最大的优势就是跨平台的。这也是“Write Once, Run Anywhere”的最好应证。

参考文献

[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

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。