This is a little thing I’ve been working on for James George’s class. It’s a sketch that evolves a 2D image sequence from a single video line. Right now it uses some form of averaging, but soon I’ll write a 1D cellular automaton to make it more interesting. Here are some results.
Here’s the code:
/** * Type 1,2 for different 'flame' modes * type 'c' to turn clipping on/off * @author Omer Shapira */ import processing.video.*; Capture video; PImage img; boolean clip = true; int type = 0; void setup(){ size(640, 480); video = new Capture(this); video.start(); img = createImage(640,480, RGB); img.loadPixels(); } void draw(){ update(); image(img,0,0); } void update(){ if (video.available() == true) { video.read(); video.loadPixels(); int ix,iy; for (int i = width*height-1; i>=0; i--){ ix = i%width; iy = i/width; if (iy >= height-2){ img.pixels[i] = video.pixels[i]; } else { switch (type){ case 0 : img.pixels[i] = averageColors(clip, img.pixels[i+width - 1], img.pixels[i+width] ,(ix==width-1? img.pixels[i+width - 1] : img.pixels[i+width + 1]), img.pixels[i+width*2]); break; case 1 : img.pixels[i] = averageColors(clip, img.pixels[i], img.pixels[i+width]); break; } } } img.updatePixels(); } } int averageColors(boolean clip, color... colors){ float tempfloat = 0; int tempColor = 0; for (int i = 0; i<4; i++){ int range = 255<<(8*i); for (color c : colors){ tempfloat += (c&range); } tempfloat /= (float) colors.length; tempColor += (!clip ? int(tempfloat) : int(tempfloat)&range); tempfloat = 0; } return tempColor; } void keyTyped(){ if (key < '9' && key > '0'){ type = int(key)%2; } else if (key=='c') { clip = !clip; } }