微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在每个单元格中制作带有随机图像的网格 - 处理

如何解决如何在每个单元格中制作带有随机图像的网格 - 处理

我正在尝试构建一个网格,其中每个单元格都由 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(); 保存图像之前,图像可能无法全部及时加载。解决此问题的一种方法是在加载图像和显示图像之间建立等待时间。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。