Java
![](/icons/49169de.gif)
图像处理能力不断地在增长
![](/icons/49169dou.gif)
但是将
![](/icons/49169yi.gif)
个如PNG或者JPEG格式
![](/icons/49169de.gif)
文件写入磁盘或从磁盘读取这样
![](/icons/49169de.gif)
操作仍然是
![](/icons/49169yi.gif)
种巫术
![](/icons/49169dou2.gif)
解决方案是使用Java Advanced Imaging(JAI)API
![](/icons/49169dou2.gif)
JAI可以在Sun
![](/icons/49169de.gif)
Java网站WebSite下载
![](/icons/49169dou.gif)
在JDK1.4
![](/icons/49169de.gif)
javax.imageio包里已经包括了它
![](/icons/49169dou2.gif)
有针对Windows平台
![](/icons/49169de.gif)
exe格式
![](/icons/49169de.gif)
JAI安装文件可以下载
![](/icons/49169dou.gif)
但是没有针对UNIX和Linux
![](/icons/49169de.gif)
安装文件
![](/icons/49169dou2.gif)
尽管JAI可以在纯Java模式下运行
![](/icons/49169dou.gif)
但它也为Windows、Linux、UNIX提供了本地库
![](/icons/49169dou.gif)
使用它们可以提高运行速度
![](/icons/49169dou2.gif)
下面
![](/icons/49169de.gif)
例子是安装在Apple机
![](/icons/49169de.gif)
OS X系统上
![](/icons/49169de.gif)
![](/icons/49169dou.gif)
因此我们选择了纯Java模式
![](/icons/49169dou2.gif)
为了安装JAI
![](/icons/49169dou.gif)
你需要
![](/icons/49169yi.gif)
个jai tar.gz文件
![](/icons/49169dou2.gif)
把 3个重要
![](/icons/49169de.gif)
jar文件mlibwrapper_jar.jar、jar_codec.jar和jar_core.jar移到你
![](/icons/49169de.gif)
![](/icons/49169class.gif)
path环境变量指定
![](/icons/49169de.gif)
目录下
![](/icons/49169dou2.gif)
我们推荐把它们放到你
![](/icons/49169de.gif)
JDK
![](/icons/49169de.gif)
jre/lib/ext目录下
![](/icons/49169dou2.gif)
实际上JAI是Java中
![](/icons/49169de.gif)
![](/icons/49169yi.gif)
个临时系统
![](/icons/49169dou2.gif)
这里只有
![](/icons/49169yi.gif)
个名为JAI
![](/icons/49169de.gif)
顶层类和很少
![](/icons/49169de.gif)
几个辅助思路方法
![](/icons/49169dou.gif)
而没有很多思路方法让人去学习
![](/icons/49169dou2.gif)
这些思路方法里
![](/icons/49169de.gif)
第
![](/icons/49169yi.gif)
个参数是操作名
![](/icons/49169dou.gif)
所以代码象这样:
src = JAI.create("fileload", .. );
JAI.create("extrema", src, ...);
JAI.create("histogram", src, ...);
这样
![](/icons/49169de.gif)
系统在使它和你自己
![](/icons/49169de.gif)
或者第 3方
![](/icons/49169de.gif)
功能可以很容易结合在
![](/icons/49169yi.gif)
起
![](/icons/49169de.gif)
同时也使得类型间
![](/icons/49169de.gif)
耦合更松散
![](/icons/49169dou.gif)
这进而使得在这的下
![](/icons/49169de.gif)
开发更困难
![](/icons/49169dou2.gif)
将
![](/icons/49169yi.gif)
个AWT图形转换成
![](/icons/49169yi.gif)
个PNG文件需要下列
![](/icons/49169de.gif)
代码片断:
import java.awt.Image;
import java.awt.image.renderable.ParameterBlock;
import javax.media.jai.JAI;
import javax.media.jai.PlanarImage;
.....
Image img = ....
OutputStream out = ....
ParameterBlock pb =
![](/icons/49169new.gif)
ParameterBlock
![](/icons/49169kh.gif)
.add(img);
PlanarImage src = (PlanarImage) JAI.create("awtImage", pb);
JAI.create("encode", src, out,"PNG", null);
以上
![](/icons/49169de.gif)
例子演示了两种给create思路方法传参数
![](/icons/49169de.gif)
思路方法
![](/icons/49169dou.gif)
其中较新
![](/icons/49169de.gif)
思路方法是使用
![](/icons/49169yi.gif)
个包含了所有参数
![](/icons/49169de.gif)
ParameterBlock
![](/icons/49169dou.gif)
我们在对awtImage
![](/icons/49169de.gif)
操作中是这么做
![](/icons/49169de.gif)
![](/icons/49169dou2.gif)
旧
![](/icons/49169de.gif)
思路方法使用
![](/icons/49169de.gif)
是
![](/icons/49169yi.gif)
个重载
![](/icons/49169de.gif)
思路方法
![](/icons/49169dou.gif)
它现在是deprecated(即被替代
![](/icons/49169de.gif)
旧思路方法
![](/icons/49169dou.gif)
不推荐使用
![](/icons/49169de.gif)
)思路方法
![](/icons/49169dou.gif)
但在这个例子中
![](/icons/49169dou.gif)
我们为encode操作使用了它
![](/icons/49169dou2.gif)
上面
![](/icons/49169de.gif)
代码会将
![](/icons/49169yi.gif)
个图像按PNG格式编码并写到OutputStream中去
![](/icons/49169dou2.gif)
如果你想对JAI进行进
![](/icons/49169yi.gif)
步
![](/icons/49169de.gif)
了解
![](/icons/49169dou.gif)
我们强烈推荐你去读JAI指南