Я сохраняю очень большой PNG (25 МБ или около того) с Java. Проблема в том, что при ее создании он использует 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);
Есть ли способ сделать и сохранить изображение, не имея всего изображения в памяти?
Edit: Чтобы рисовать изображения, я делаю это в цикле:
BufferedImage tile = ImageIO.read(new File("file.png"));
g2d.drawImage(tile, x, y, w, h);
Это повторяется много раз (обычно около 25x25, но иногда и больше), поэтому, если есть небольшая утечка памяти, это может вызвать проблемы.