Abstrahierte Bilddarstellung in Processing

Hinzugefügt am von Steffen Fiedler
In der folgenden Version wird das pixels Array, welches alle Bildpunkte des Kamerabildes enthält, in großen Schritten durchlaufen und durch eingefärbe Kreise in der Zeichenfläche repräsentiert. In der Breite wird dabei jedes achte Pixel interpretiert und in der Höhe jede vierte Zeile. Bei der Positionsabfrage auf der y-Achse und der Ermittlung der x-Koordinate wird von Modulo (%) gebrauch gemacht. Modulo gibt den Rest einer Division zurück und ermöglicht dadurch unteranderem die Frage ob ein Wert gerade ist oder nicht. Da das Programm nicht mit dem get() und set() Befehlen zum Auslesen und Ändern von Farbwerten innerhalb des bildes Arbeit, sonder dieser Bereich über das pixels Array abgewickelt wird, schafft Processing eine größere Anzahl von Bildern pro Sekunde abzuarbeiten.

Der Sketch

import processing.video.*;

Capture cam;

void setup () {
  size (320, 240);
  cam = new Capture (this, width, height, 24);
  noStroke ();
}

void draw () {
  background (0);
  // wenn Kamera-Input verfügbar
  if (cam.available ()) {
    // liest momentanes Kamerabild aus
    cam.read ();
  }
  // für jeden Pixel im Videobild
  for (int i=0; i < cam.pixels.length; i += 8) {
    
    // Wenn 'i' an dem erste Pixel einer Zeile 
    // angekommen ist (Rest aus i/Bildbreite = 0)
    if (i % cam.width == 0) {
      // Wenn die Zeile einen geraden Index
      // besitzt (Rest aus i/2 = 0)
      if (i%2 == 0) {
        // Verschiebe i um 4 Zeilen
        i += cam.width * 4;
      }
    }
    // Berechne die Position des Pixels an der 
    // Stelle 'i' in der Bildfläche.
    int x = i % cam.width;
    int y = (int) floor (i / cam.width);
    
    // Setze die Füllfarbe und zeichne eine 
    // Ellipse an der Position des Pixels
    fill (cam.pixels[i]);
    ellipse (x, y, 10, 10);
  }
}