Created
August 30, 2014 02:38
-
-
Save mudphone/a447b09040cb637275e7 to your computer and use it in GitHub Desktop.
Time Displacement, Processing Demo, by David Muth
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Time Displacement | |
* by David Muth | |
* | |
* Keeps a buffer of video frames in memory and displays pixel rows | |
* taken from consecutive frames distributed over the y-axis | |
*/ | |
import processing.video.*; | |
Capture video; | |
int signal = 0; | |
//the buffer for storing video frames | |
ArrayList frames = new ArrayList(); | |
void setup() { | |
size(640, 480); | |
// This the default video input, see the GettingStartedCapture | |
// example if it creates an error | |
video = new Capture(this, width, height); | |
// Start capturing the images from the camera | |
video.start(); | |
} | |
void captureEvent(Capture camera) { | |
camera.read(); | |
// Copy the current video frame into an image, so it can be stored in the buffer | |
PImage img = createImage(width, height, RGB); | |
video.loadPixels(); | |
arrayCopy(video.pixels, img.pixels); | |
frames.add(img); | |
// Once there are enough frames, remove the oldest one when adding a new one | |
if (frames.size() > height/4) { | |
frames.remove(0); | |
} | |
} | |
void draw() { | |
// Set the image counter to 0 | |
int currentImage = 0; | |
loadPixels(); | |
// Begin a loop for displaying pixel rows of 4 pixels height | |
for (int y = 0; y < video.height; y+=4) { | |
// Go through the frame buffer and pick an image, starting with the oldest one | |
if (currentImage < frames.size()) { | |
PImage img = (PImage)frames.get(currentImage); | |
if (img != null) { | |
img.loadPixels(); | |
// Put 4 rows of pixels on the screen | |
for (int x = 0; x < video.width; x++) { | |
pixels[x + y * width] = img.pixels[x + y * video.width]; | |
pixels[x + (y + 1) * width] = img.pixels[x + (y + 1) * video.width]; | |
pixels[x + (y + 2) * width] = img.pixels[x + (y + 2) * video.width]; | |
pixels[x + (y + 3) * width] = img.pixels[x + (y + 3) * video.width]; | |
} | |
} | |
// Increase the image counter | |
currentImage++; | |
} else { | |
break; | |
} | |
} | |
updatePixels(); | |
// For recording an image sequence | |
//saveFrame("frame-####.jpg"); | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment