如何在每个单元格中制作带有随机图像的网格 - 处理
How to make a grid with random images in each cell - Processing
我正在尝试构建一个网格,其中每个单元格都由 Processing 中的随机图像填充。我在数据文件夹中有 500 多张名为 img_xxx.jpg 的图像。到目前为止,我已经完成了一个网格,其中显示的图像是随机的,但每个单元格都是相同的图像。希望你能帮帮我!谢谢
final static byte GRID = 6, NUM = GRID*GRID;
PImage img;
int rand;
void setup() {
size(400, 400);
noLoop();
smooth();
background(0);
final PImage[] imgs = new PImage[NUM];
final int tileW = width/GRID, tileH = height/GRID;
rand = int(random(0,687));
for (int idx=0; idx!=NUM; imgs[idx++] = loadImage("img_" + nf(rand,3)+ ".jpg"));
for (int idx=0, row=0; row!=GRID; ++row) for (int col=0; col!=GRID;
image(imgs[idx++], col++*tileW, row*tileH, tileW, tileH));
img = get();
}
void draw() {
background(img);
}
您在 for
循环中完成的极端抽象写起来很有趣,但读起来却很痛苦。你需要在每张图片上重新计算 rand
,所以你的第一个 for
循环是这样写的:
for (int idx=0; idx!=NUM; idx++) {
rand = int(random(0, 687));
imgs[idx] = loadImage("img_" + nf(rand, 3)+ ".jpg");
}
或者,在您的抽象版本中:
for (int idx=0; idx!=NUM; imgs[idx++] = loadImage("img_" + nf(int(random(0,687)),3)+ ".jpg"));
(作为旁注,我相信 nf()
在较新版本的 Processing 中适用于浮点数,因此您不需要那个 int()
命令)
您可能 运行 遇到内存问题,因为在您使用 img = get();
保存图像之前,图像可能不会全部及时加载。解决此问题的一种方法是在加载图像和显示图像之间增加等待时间。
我正在尝试构建一个网格,其中每个单元格都由 Processing 中的随机图像填充。我在数据文件夹中有 500 多张名为 img_xxx.jpg 的图像。到目前为止,我已经完成了一个网格,其中显示的图像是随机的,但每个单元格都是相同的图像。希望你能帮帮我!谢谢
final static byte GRID = 6, NUM = GRID*GRID;
PImage img;
int rand;
void setup() {
size(400, 400);
noLoop();
smooth();
background(0);
final PImage[] imgs = new PImage[NUM];
final int tileW = width/GRID, tileH = height/GRID;
rand = int(random(0,687));
for (int idx=0; idx!=NUM; imgs[idx++] = loadImage("img_" + nf(rand,3)+ ".jpg"));
for (int idx=0, row=0; row!=GRID; ++row) for (int col=0; col!=GRID;
image(imgs[idx++], col++*tileW, row*tileH, tileW, tileH));
img = get();
}
void draw() {
background(img);
}
您在 for
循环中完成的极端抽象写起来很有趣,但读起来却很痛苦。你需要在每张图片上重新计算 rand
,所以你的第一个 for
循环是这样写的:
for (int idx=0; idx!=NUM; idx++) {
rand = int(random(0, 687));
imgs[idx] = loadImage("img_" + nf(rand, 3)+ ".jpg");
}
或者,在您的抽象版本中:
for (int idx=0; idx!=NUM; imgs[idx++] = loadImage("img_" + nf(int(random(0,687)),3)+ ".jpg"));
(作为旁注,我相信 nf()
在较新版本的 Processing 中适用于浮点数,因此您不需要那个 int()
命令)
您可能 运行 遇到内存问题,因为在您使用 img = get();
保存图像之前,图像可能不会全部及时加载。解决此问题的一种方法是在加载图像和显示图像之间增加等待时间。