图像在处理中使用过多的 RAM
Images use too much RAM in Processing
我正在尝试加载几千张小图像进行处理并将它们显示为更大的地图。图像的总文件大小为 130MiB,但是当我 运行 程序使用我所有的 RAM 时,我什至得到一个 OutOfMemoryError
,因为 RAM 使用量超过 2GiB。
是什么导致内存使用量超过文件大小的 10 倍,有什么方法可以缓解这种情况?
编辑:
示例代码
ArrayList<PImage> images = new ArrayList<PImage>();
void setup() {
for (int i = 0; i < 2000 /*num of images*/; i++) {
images.add(loadImage(Integer.toString(i) + ".jpg");
}
}
//in reality, never gets here
void draw() {
for (PImage i: images) {
image(i, /*precalculated x and y*/ random(500), random(500));
}
}
JPEG 压缩比是 10:1,这样就可以解释:图像在磁盘上被压缩,但是当加载到您的程序中并解压缩时,您会得到 10 倍的大小。
要改进您的代码,请不要一次加载所有图像:一次处理几个图像。
我正在尝试加载几千张小图像进行处理并将它们显示为更大的地图。图像的总文件大小为 130MiB,但是当我 运行 程序使用我所有的 RAM 时,我什至得到一个 OutOfMemoryError
,因为 RAM 使用量超过 2GiB。
是什么导致内存使用量超过文件大小的 10 倍,有什么方法可以缓解这种情况?
编辑:
示例代码
ArrayList<PImage> images = new ArrayList<PImage>();
void setup() {
for (int i = 0; i < 2000 /*num of images*/; i++) {
images.add(loadImage(Integer.toString(i) + ".jpg");
}
}
//in reality, never gets here
void draw() {
for (PImage i: images) {
image(i, /*precalculated x and y*/ random(500), random(500));
}
}
JPEG 压缩比是 10:1,这样就可以解释:图像在磁盘上被压缩,但是当加载到您的程序中并解压缩时,您会得到 10 倍的大小。
要改进您的代码,请不要一次加载所有图像:一次处理几个图像。