【问题标题】:How to make a grid with random images in each cell - Processing如何在每个单元格中使用随机图像制作网格 - 处理
【发布时间】:2021-05-30 09:58:47
【问题描述】:

我正在尝试构建一个网格,其中每个单元格都由处理中的随机图像填充。我在数据文件夹中有 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);
}

【问题讨论】:

    标签: image-processing processing


    【解决方案1】:

    您在 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() 在新版本的处理中适用于浮点数,因此您不需要 int() 命令)

    您可能会遇到内存问题,因为在您使用img = get(); 保存图像之前,图像可能无法全部及时加载。解决此问题的一种方法是在加载图像和显示它们之间建立等待时间。

    【讨论】:

    • 非常感谢!是的,它真的很抽象,我最终几乎改变了一切
    猜你喜欢
    • 2020-05-31
    • 2013-11-21
    • 1970-01-01
    • 2014-10-10
    • 2014-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多