这是我的代码......
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(),但无济于事。
提前致谢!
答案 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
方法)。