处理save()函数仅保存最终结果

时间:2015-12-10 04:51:03

标签: save processing processing.js

这是我的代码......

void setup() {
  size(500, 500);
  surface.setResizable(true);

  smooth();

  dot = loadImage("1-DOT.png");
} 


void draw() {
  background(255);

  grid(dot, 5, .2);
}


void grid(PImage img, int dim, float scale) {

  int imgsize = floor(img.width * scale);    
  int canvassize;

  for (int i = 1; i <= dim; i++) {
    canvassize = dim * imgsize;
    surface.setSize(canvassize, canvassize);
    for (int x = 0; x < canvassize; x += imgsize) {
      for (int y = 0; y < canvassize; y += imgsize) {
        image(img, x, y, imgsize, imgsize);
      }
    }
    save("grid_" + str(i) + ".png");
  }    
}

网格功能采用图像文件,尺寸参数和比例。它创建了大小为0的方形网格,从图像变暗。

它应该将此网格的每次迭代保存为文件。但事实并非如此。一旦我运行代码,我剩下的就是(在这种情况下),5个相同的5x5网格。我应该有1x1网格,2x2网格等等。我也试图使用saveFrame(),但无济于事。

提前致谢!

2 个答案:

答案 0 :(得分:0)

Majlik是正确的,你没有正确计算你的canvassize。如果您希望循环的每次迭代都不同,那么您需要使用i而不是dim

但最重要的是,在调用surface的过程中更改draw()的大小似乎是一个非常糟糕的主意。这会为我抛出一个IndexOutOfBoundsException

相反,如果你创建一个你想要的任何大小的PGraphics,那么你可能会有更好的运气。这是一个例子:

void setup() {
  PImage dot = loadImage("dot.png");
  grid(dot, 5, .2);
  exit();
} 
void grid(PImage img, int dim, float scale) {

  int imgsize = floor(img.width * scale);    

  for (int i = 1; i <= dim; i++) {
    int canvassize = i * imgsize;
    PGraphics pg = createGraphics(canvassize, canvassize);
    pg.beginDraw();
    for (int x = 0; x < canvassize; x += imgsize) {
      for (int y = 0; y < canvassize; y += imgsize) {
        pg.image(img, x, y, imgsize, imgsize);
      }
    }
    pg.endDraw();
    pg.save("grid_" + str(i) + ".png");
  }
}

创建这些图像:

另外,请注意我没有从draw()函数调用此函数:您的程序会不断创建图像,这是不必要的。只需创建一次然后退出。

答案 1 :(得分:-1)

我认为你错误地计算canvassize。如果我的目标正确,则应使用i代替dim

canvassize = i * imgsize;                             // Corrected

使用saveFrame代替save

也更容易
saveFrame("grid_###.png");

但我只使用Java模式测试(没有surface方法)。