我可以在没有整个东西在内存的情况下保存一个巨大的PNG吗?
我正在用Java保存一个非常大的PNG(25 MB左右)。问题是,当它被生成时,它使用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,但有时更多),所以如果这里甚至有一个小的内存泄漏,那可能会导致问题。