import processing.video.*; // size of the capture int w = 640; int h = 480; // capture variables Capture cm; String cam; // font variables; PFont font; // text grid int horizSpace = 12; int vertSpace = 12; // some letters ordered by density String [] letters = {"k", "h", "n", "j", "i", ";", "."}; void setup() { size(w, h); framerate(30); noStroke(); fill(0); background(255); //println(Capture.list()); // init capture //cam = "Creative WebCam Live! Pro-WDM"; cm = new Capture (this, w, h, 30); // load font font = loadFont("sansserif-12.vlw"); textFont(font); } void captureEvent(Capture cm) { cm.read(); } void draw() { // draw capture to screen //image(cm, 0, 0); background(255); for (int i = 0; i < w; i+= horizSpace) { for (int j = 0; j < w; j+= vertSpace) { float thisBrightness = brightness(cm.get(i, j)); String thisLetter = chooseLetter(thisBrightness); text(thisLetter, i, j, horizSpace, vertSpace); } } saveFrame(); } String chooseLetter(float br) { String letter = ""; int difInValue = 40; int thisValue = 0; int oldValue = thisValue; int counter = 0; for (int b = 0; b < 255; b += difInValue) { thisValue += difInValue; if (br > oldValue && br < thisValue) { letter = letters[counter]; } counter++; oldValue = thisValue; } return letter; }