Pixel Array

pixel-array.pde
/**
 * Pixel Array.
 *
 * Click and drag the mouse up and down to control the signal and
 * press and hold any key to see the current pixel being read.
 * This program sequentially reads the color of every pixel of an image
 * and displays this color to fill the window.
 */

PImage* img;
int direction = 1;
float signal;

void setup() {
  size(640, 360);
  noFill();
  stroke(255);
  frameRate(30);
  img = loadImage("sea.jpg");
}

void draw() {
  if (signal > img->width*img->height-1 || signal < 0) {
    direction = direction * -1;
  }

  if (isMousePressed()) {
    int mx = constrain(mouseX, 0, img->width-1);
    int my = constrain(mouseY, 0, img->height-1);
    signal = my*img->width + mx;
  } else {
    signal += 0.33*direction;
  }

  int sx = int(signal) % img->width;
  int sy = int(signal) / img->width;

  if (_keyPressed) {
    image(img, 0, 0);  // draw the whole image
    point(sx, sy);
    rect(sx - 5, sy - 5, 10, 10);
  } else {
    color c = img->get(sx, sy);
    background(c);
  }
}