#image-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);
}
Ответ №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();
. Один из способов решить эту проблему-увеличить время ожидания между загрузкой изображений и их отображением.
Комментарии:
1. Большое вам спасибо! Да, это действительно абстрактно, в итоге я изменил почти все