I have images that are downscaled as 150x150 thumbnails (original resolutions can be up to 10,000x10,000), however even after I downscale them the task manager still shows I'm using entire gigabytes of memory.
private void addImage(String path) {
BufferedImage image = ResourceManager.loadImageFromPath(path);
BufferedImage subImage;
int delta = image.getHeight() - image.getWidth();
if (delta > 0) {
subImage = image.getSubimage(0, delta / 2, image.getWidth(),
image.getHeight() - delta);
} else if (delta < 0) {
subImage = image.getSubimage(-delta / 2, 0, image.getWidth() + delta,
image.getHeight());
} else {
subImage = image;
}
Resizer resizer = DefaultResizerFactory.getInstance().getResizer(new
Dimension(subImage.getWidth(), subImage.getHeight()), new Dimension(150, 150));
BufferedImage scaled = new FixedSizeThumbnailMaker(150, 150, true, true)
.imageType(BufferedImage.TYPE_INT_RGB)
.resizer(resizer)
.make(subImage);
imageList.add(path);
ImageCard card = new ImageCard(scaled, imageList.indexOf(path));
imagesPane.add(card);
image.flush();
subImage.flush();
}
public static BufferedImage loadImageFromPath(String path) {
System.out.println("Importing image: " + path);
try {
return ImageIO.read(new File(path).toURL());
} catch (IOException ex) {
System.err.println("Failed to load file: " + path);
ex.printStackTrace();
return null;
}
}