Java AffineTransformOp вопрос памяти - PullRequest
       2

Java AffineTransformOp вопрос памяти

0 голосов
/ 01 августа 2009

Я пытаюсь применить AffineTransform к изображению в Java. Вот код, который я запускаю.

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

Где atx является допустимым объектом AffineTransform. Кажется, что этот код работает нормально, но он оставляет очень большой объем памяти после того, как я делаю это несколько раз, и в конце концов моей программе не хватает памяти.

Я уверен, что эта строка является виновником, потому что если я закомментирую применение преобразования, то утечки памяти не произойдет.

У меня есть 3 вопроса:

  1. Почему синтаксис метода filter такой странный (он принимает src и destination и возвращает target)?
  2. Почему это вызывает утечку памяти?
  3. Как я могу это исправить?

Спасибо!

1 Ответ

2 голосов
/ 01 августа 2009

BufferedImage, в зависимости от разрешения источника, может быть довольно большим и дорогим в создании. Имея это в виду:

  1. .filter() принимает целевой параметр, чтобы избежать ненужного создания копии BufferedImage, если у вас уже есть одна готовая копия. Другими словами, если мне нужно обработать последовательность (совместимых) изображений, лучше использовать одно буферизованное изображение в качестве места назначения для всех преобразований, чем каждый раз создавать новое.

  2. Само преобразование не вызывает утечку памяти. Вы прямо или косвенно держитесь за все созданные вами BufferedImage экземпляры.

  3. Это зависит от того, что вы делаете. Для начала вам нужно выяснить, где находятся ссылки на ваши экземпляры BufferedImage. Звонить flush() тоже не повредит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...