吕克让的资料库 - lhelper's repository

克己服人,礼智谦让!
Weblcome to lhelper's repository!

Thursday, August 17, 2006

 

Encounter Toolkit.getImage()'s unintended cache

在借助ImageJ 的 ij.jar 做图片处理的过程中遇到一个奇怪的问题:原始的图片文件被修改之后,基于“新图片”的再加工经常(1)不能生效,再加工的结果往往是基于原始图片的。

通过在程序的关键位置加入调试信息,开启ImageJ 的调试开关(IJ.debugMode = true;),最后发现问题发生在new java.io.Opener().openImage(source) 这一步。查看Opener 的源代码,发现了

Toolkit.getDefaultToolkit().getImage(dir+name);

总算定位到了问题的所在:)。下面是在mindprod.com 上找到的有关getImage cache 的讲解:

getImage() caches results. If you change the disk file of the image, and refetch you will likely get the old version again. Use createImage can bypass the caching.

——其实JDK 的Doc 中就有相关的说明,只是搜索引擎让我变懒了,把它给忽视了!

接下来,修改Opener 的源代码(用createImage 代替 getImage)、编译、把Opener.class重新打包入ij.jar中,最终问题“算是”得到解决!

一直想用GraphicsMagick (derived from ImageMagick)来代替 ImageJ 做图片处理——ImageJ 在处理某些特殊格式的图片文件时显得有些力不从心,很多图像处理算法相比流行的图片处理软件也相差甚远——个人感觉ImageJ 更适于拿来解决“从无到有”的温饱问题。

P.S. IrfanView 的图像处理算法相当不错,只可惜作者没有提供基于它的SDK,别人无法基于它来做二次开发,可惜!

参考:


Archives

June 2004   November 2005   July 2006   August 2006  

This page is powered by Blogger. Isn't yours?