Могу ли я сохранить огромный PNG без того, чтобы все было в памяти?

Я сохраняю очень большой PNG (25 МБ или около того) с Ява. Проблема в том, что пока он создается, он использует 3+ гигабайта памяти, что не идеально, поскольку сильно замедляет работу систем с нехваткой памяти.

Код, с которым я работаю, должен объединять набор мозаичных изображений в единое изображение; другими словами, у меня есть девять изображений (PNG):

A1 A2 A3
B1 B2 B3
C1 C2 C3

, которые нужно объединить в одно изображение.

Я использую следующий код:

image = new BufferedImage(width, height, height, BufferedImage.TYPE_INT_ARGB_PRE);
g2d = image.createGraphics();
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);

// draw the 9 images on here at their proper positions...

// save image
g2d.dispose();
File file = getOutputFile();
ImageIO.write(image, "png", file);

Есть ли способ создать и сохранить изображение без сохранения всего изображения в памяти?


Редактировать: Чтобы нарисовать изображения, я делаю это в цикле:

BufferedImage tile = ImageIO.read(new File("file.png"));
g2d.drawImage(tile, x, y, w, h);

Это повторяется много раз (обычно это примерно 25x25, но иногда и больше), поэтому, если здесь есть даже небольшая утечка памяти, это может вызвать проблема.

15
задан Tom Marthenal 12 October 2011 в 05:35
поделиться