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