Java AffineTransformOp内存问题

时间:2009-07-31 22:11:03

标签: java image-processing

我正在尝试将AffineTransform应用于Java中的图像。这是我正在运行的代码。

AffineTransformOp op =
        new AffineTransformOp(atx, interactive ? interpolationInteractive : interpolationNormal);
displayImage = op.filter(displayImage, null);

其中atx是有效的AffineTransform对象。这段代码似乎运行正常,但是在我多次执行之后会留下非常大量的内存,最终我的程序内存不足。

我确定这一行是罪魁祸首,因为如果我注释掉应用转换,那么就不会发生内存泄漏。

我有3个问题:

  1. 为什么过滤方法的语法如此奇怪(它接收src和目的地,并返回目的地)?
  2. 为什么会导致内存泄漏?
  3. 我该如何解决?
  4. 谢谢!

1 个答案:

答案 0 :(得分:2)

BufferedImage,取决于源的分辨率,可能非常大且创建起来很昂贵。考虑到这一点:

  1. .filter()方法语法采用目标参数,以避免在已准备好的情况下不必要地创建BufferedImage副本。换句话说,如果我需要处理一系列(兼容的)图像,那么重复使用一个缓冲的图像作为所有转换的目的地将是一种更好的方法,然后每次创建一个新的。

  2. 转换本身不会导致内存泄漏。您直接或间接持有您创建的所有BufferedImage个实例。

  3. 这取决于你在做什么。对于初学者,您需要找出引用BufferedImage个实例的位置。拨打flush()也不会受到影响。