Creative Coding

btk

Till Nagel

Extern 4 - Woche 13

Aufgaben

L1: Pointillism

Lösung

Erweitere das Beispiel, so dass die Fläche schneller mit Kreisen gefüllt wird. Zeichne dafür pro Durchlauf einfach mehrere Kreise. Ändere den Code weiterhin so, dass die Größe der Kreise interaktiv gesteuert werden können.

Variante: Verwende andere visuelle Elemente. Lass einige Parameter zufällig bestimmen.

Variante: Errechne einen Mittelwert der Farben.

L2: LiveVideo-Pointillism

Lösung

Kombiniere das LiveVideo-Beispiel mit deinem Sketch J2, so dass du das Kamerabild direkt manipulierst.

L3: RasterizedVideo

Verwende die unten stehende Funktion drawRectImage() um das LiveVideo Bild zu rastern.

Variante: Probiere verschiedene Varianten aus. Farben manipulieren, interaktiv werden lassen, etc.

Bildbearbeitung

In diesem Abschnitt werden wichtige Bildbearbeitungsthemen erläutert, die für die Videobearbeitung ebenso notwendig sind. (Siehe auch nochmal PImage-Objekt)

Bildgröße

Nachdem mit loadImage() ein Bild in ein PImage geladen wurde, kann die Größe des Bildes abgefragt werden. Dazu können die Eigenschaften width und height verwendet werden.

Pixelarray

Ein Bild besteht aus den einzelnen Bildpunkten, die auf einer Fläche angeordnet sind. Auf die einzelnen Farbwerte des Zeichenbereichs kann – wie wir letztes Semester gesehen hatten – über die Anweisung get(x, y) zugegriffen werden. Wie man nun die Pixel eines Bildes auslesen und verwenden kann, ohne das Bild zeichnen zu müssen, wird im Folgenden gezeigt.

Die einzelnen Bildpunkte eines PImage-Bildes sind in einem Pixelarray gespeichert. In Processing kann man auf die Pixel via img.pixels[i] zugreifen. In diesem Array sind die Farbwerte jedes Bildpunktes allerdings einfach, d.h. linear hintereinander abgelegt.

So kann durch den Index bspw. nicht direkt auf das Pixel in der 3. Zeile, 2. Spalte zugegriffen werden (hier: j). Um nun auf das zweidimensionale Bild in gewohnter Weise zugreifen zu können, kann man folgende Formel verwenden: pixelIndex = y * bildBreite + x
Möchte man nun auf den Pixel vom obigen Beispiel zugreifen, also folgendermaßen (wobei natürlich immer bei 0 zu zählen begonnen wird):

Beispiel: Pointillism

Zur besseren Veranschaulichung dieses Pixelarrays hier ein Beispiel, dass ein Bild nicht direkt zeichnet, sondern an zufällige Positionen Kreise zeichnet, die von einem an dieser Stelle liegenden Farbwert beeinflusst werden.

Je mehr und je feinere Kreise gezeichnet werden, desto besser kann das Original-Bild erkannt werden.

In setup() werden die üblichen Einstellungsanweisungen ausgeführt, und das Bild geladen. In drawPoint() wird zunächst (in Zeilen 17, 18) eine zufällige Position auf dem Bild ausgewählt und in integer-Variablen gespeichert. Danach wird der Farbwert des Pixels (über die obengenannte Formel) an dieser Position ausgelesen und ein Kreis in dieser Farbe gezeichnet.

Video 2

Pixel-Array der Zeichenfläche

Um schneller und performanter arbeiten zu können, können statt mit Zeichenanweisungen auch direkt die Farben des sichtbaren Felds manipuliert werden. So können einzelne Pixel über das Array pixels[] verändert werden, anstatt mit point(x, y).

Das Pixel-Array enthält für alle Pixel des Zeichenbereichs die Werte (vom Datentyp color). Das Array ist genauso groß wie die Zeichenfläche: Wenn der Sketch mit size(200, 100) erstellt wurde, ist das Array folglich 200×100 groß und enthält daher 20.000 Werte. Der Index bestimmt die Position innerhalb des Arrays. (Siehe Pixel-Array der Bilder)

Bevor mit dem Array gearbeitet werden kann, müssen die aktuellen Werte, d.h. die aktuell zu sehenden Farben auf der Zeichenfläche, mittels loadPixels() geladen werden. Nachdem man die Daten geändert hat, muss updatePixels() aufgerufen werden, um die Änderungen auch sichtbar zu machen.

Pixelmanipulation

Zum leichteren Start hier eine Funktion, die ein PixelArray verwendet, um es aus Rechtecken zu zeichnen. Die Parameter sind:

  • pixelArray - Das PixelArray
  • w - Weite des Ausschnitts
  • w - Höhe des Ausschnitts
  • wd - Weite der Rasterung
  • hd - Höhe der Rasterung

Möchte man zum Beispiel das Live-Bild mit dieser Methode zeichnen, kann folgender Aufruf genutzt werden:

Creative Commons Lizenz: Namensnennung-NichtKommerziell-Weitergabe unter gleichen Bedingungen 2.0 (Deutschland)

© 2008 Till Nagel, All rights reserved – Alle Rechte vorbehalten.