网站首页

家园论坛

老版论坛

家园博客

业界新闻

技术文档

下载中心

速查中心

图片中心

硬件资讯
上一篇:Java Socket编程 下一篇:JAVA实现数据采集程序基本原理
高级图像处理图像I/O API RC 1.0

来源: 作者:John Zukowski 添加日期:2006-6-11 8:57:14 点击次数:
如果你对图像处理感兴趣,而且需要使用GIF、JPEG和PNG以外的其它图像格式,或者希望改善JPEG图像处理的性能但不知道到哪里寻找适当的方法,或者需要通过几何运算(包括非线性变换)来处理图像,不必再为此苦恼了,答案就在这里——来自Sun公司的Java高级图像处理API和JAI图像I/O  API  1.0  RC。

JAI  API是Java  Media  API的一部分,与之相伴的还包括Java  2D  API、Java  3D  API、Java  Speech  API和其他一些API。Java高级图像处理API是作为Java规范请求(JSP)34的一部分而开发的,是对J2SE  version  1.3+版的扩展,主要用于处理图像。最初发布的版本是1.0,JDC(Java  Developer  Connection)提供了一个预览版1.1.2  beta。(最新进展情况请查阅README.html文件。)与AWT和Java  2D相比,JAI  API提供了更丰富的图像处理,包括对许多通用图像操作的内在支持。

不过本文的目的不是讨论JAI  API,而是伴随这些API但分离到它自己的可安装库中的一组图像读写器(codec)类,即Java高级图像处理图像I/O工具1.0  RC。该RC提供了可以插接到J2SE  1.4的图像I/O框架上的一些功能。作为JSR-15一部分而开发的图像I/O  API提供了一个支持不同图像格式的可插拔框架。标准J2SE  1.4版本身支持GIF、JPEG和PNG图像格式,而JAI图像I/O  RC则提供了更多主流图像格式的编码解码器。只要加上针对操作平台的适当版本,以前开发的应用程序就可以处理这些新的图像格式。

要理解JAI图像I/O工具的使用,需要首先了解图像I/O库。在安装和介绍图像I/O工具包之前,我们先看一看图像I/O库。
图像I/O库

图像I/O库是J2SE  1.4的标准API,放在javax.imageio包内。虽然这个包提供了两个接口和9个类,整个API实际上就是ImageIO类。通过这个类可以弄清读写所支持的图像格式并对这些图像进行读写,实际上这也就是整个API的全部内容。

由于图像I/O库是一个可插拔的框架,所支持的图像格式集不是固定不变的。尽管随J2SE  1.4发布了一些标准格式,但任何人都可以增加新的支持格式。要查看有哪些格式可用,可以使用下面的代码:

import  javax.imageio.*;
import  java.util.Arrays;

public  class  GetFormats  {
       public  static  void  main(String  args[])  {
               String  readFormats[]  =  ImageIO.getReaderMIMETypes();
               String  writeFormats[]  =  ImageIO.getWriterMIMETypes();
               System.out.println("Readers:  "  +  
                               Arrays.asList(readFormats));
               System.out.println("Writers:  "  +  
                               Arrays.asList(writeFormats));
       }
}

运行该程序,你会发现这个库支持读取GIF、JPEG和PNG图像,也支持写JPEG和PNG图像,但是不支持写GIF文件。

除了与像image/jpeg这样的MIME类型协同工作外,ImageIO类还允许通过getReaderFormatNames和  getWriterFormatNames方法使用JPEG这样的非正式名称。此外,通过getImageReadersBySuffix和  getImageWritersBySuffix还可以了解是否存在针对特定文件扩展名的reader/writer存在。

利用ImageIO类,你所要做的事情不过是读javax.imageio.stream.ImageInputStream、  java.io.InputStream、java.io.File或者java.net.URL,结果会得到一个  java.awt.image.BufferedImage。一旦拥有了BufferedImage,你就可以指定需要的格式名把图像写回去。(不仅仅是  BufferImage,任何实现RenderedImage接口的类都可以写。)新的格式既可以与读取的格式相同,也可以是不同的格式以便进行格式转换。如果指定的格式没有可用的writer,那么write方法就返回false,否则如果找到了相应的writer就返回true。

本新闻共8页,当前在第1页  1  2  3  4  5  6  7  8  

 
设为首页 | 加入收藏 | 业务办理 | 友情链接 | 论坛版面 | 浙ICP备07502118号 |