处理PImage数组保留在内存中

时间:2015-01-22 15:44:51

标签: java processing

我有一个简单的处理草图,其中图片被读入PImage数组。 (按键小写字母)。如果我按下大写字母,草图应该重置所有内容或者至少使图像数组无效。但我不能完成这件事。内存分配空间,其消耗不断增长。重置应用程序时,绘制调用仍会呈现图像(第18行)。这是我的代码:

PImage[] images;
PImage photo;
int counter;
void setup()
{
  //Storage of image replicas
  images = new PImage[0];
  //Image instance that gets copied on key press
  photo = loadImage("x.png");
  size(500, 500);  
}
void draw()
{
  //Image instance
  image(photo,0,0);
  for(int i= 0; i < images.length; i++){
    //copied instances from images
    image(images[i], i*50, 100);
  }
}

void keyPressed() {
  int keyIndex = -1;
  if (key >= 'a' && key <= 'z') {
    println("copy iamge and save in PImage Array");
    PImage tmpImg = get(0,0,50,50);
    images = (PImage[]) expand(images, images.length+1);
    images[counter] = tmpImg;
    counter++;
  }
  else if (key >= 'A' && key <= 'Z') {
    //attempt to reset image cache
    for (int i=0; i< images.length; i++) {
      println("attempt to reset cache");
      g.removeCache(images[i]);
    }
    println("attempt to reset PImage Array");
    images = null;
    images = new PImage[0];
    counter = 0;
    //attempt to call setup to reset PImage Array
    setup();
  }
}

任何帮助都非常适合!

1 个答案:

答案 0 :(得分:1)

处理不会自动清除旧框架 - 它只是绘制在那里的任何东西之上。你可以用这个小草图来证明:

void draw(){
  ellipse(mouseX, mouseY, 10, 10);
}

要清除旧框架,您必须专门告诉Processing绘制背景,如下所示:

void draw(){
  background(0);
  ellipse(mouseX, mouseY, 10, 10);
}

您的代码实际 清除旧图片,但您永远不会清除旧图片,因此它们仍然可见。

只需在draw()函数的第一行调用background()函数。

至于你的内存使用情况,这可能是正常的。你的内存耗尽,还是垃圾收集器最终会启动?