Я сохраняю очень большой 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, но иногда и больше), поэтому, если здесь есть даже небольшая утечка памяти, это может вызвать проблема.