We are about to switch to a new forum software. Until then we have removed the registration on this forum.
This code should sample the first pixel from the first image in the folder (data folder), the second pixel from the second image, the third pixel from the third image, and so on; however, when I run the script with two images (a black image and a white image of equal size) it doesn't produce a neat grid of black and white pixels (black, white, black, white, black, white etc..), instead it creates a grid with clusters of black and white pixels of the sampled images. How do I get it to blend the pixels sequentially?
Any help would be appreciated.
Here is the code:
void setup() {
size (1000, 800);
//set up an underlying grid structure
int colWidth = 1; //column width
int rowHeight = 1; //row height
int colNum = width/colWidth;
int rowNum = height/rowHeight;
//load all the images in the data folder into an array (but don't draw them)
String[] filenames = listFileNames(dataPath(""));
PImage[] images = new PImage [filenames.length]; //array of original images
for (int i=0; i<images.length; i++) {
images[i] = loadImage (filenames[i]); //load each image
images[i].resize(width, height); //resize it to the size of the canvas
}
//for each image in the array, make a tile and draw it to the screen
int counter = 0; //start at first image, keep track of what image you're on
for (int j = 0; j < rowNum; j++) { //loop through all therows
for (int i = 0; i < colNum; i++) { //loop through all the columns
//for each image, make a tile
PImage tile=images[int(random(images.length))].get(i*colWidth, j*rowHeight, colWidth, rowHeight);
image(tile, i*colWidth, j*rowHeight); //draw the tile to the screen
counter++;
// NOTE: uncomment the code below to view the underlying grid
// stroke(0, 255, 0);
// noFill();
// rect(i*colWidth, j*rowHeight,colWidth, rowHeight);
if (counter >= images.length) { //value of counter never exceeds amt of images in the array
counter = 0;
}
}
}
}
void draw() {
noLoop();
}
//function to get all files in the data folder
String[] listFileNames(String dir) {
File file = new File(dir);
if (file.isDirectory()) {
String names[] = file.list();
StringList filelist = new StringList();
for (String s : names) {
if (!s.contains("DS_Store")) {
filelist.append(s);
}
}
return filelist.array();
} else {
// if it's not a directory
return null;
}
}
Answers
(deleted duplicate thread)
Sorry about the duplication.
In line 25 it seems like you are just picking images at random
images[int(random(images.length))]
, try to use yourcounter
variable instead:images[counter]
Thanks for answering Poersch. I have researched counter the last few days and played around with the code, but I can't seem to get it working :-(
If people realized how counter productive micro managing forums were , they would be silent. Nothing boils me searching for results then hitting dead ends by someone interrupting a subject to pint out its in the wrong category or posted twice. STOP IT. Its not helpful.