Creative Coding

btk

Till Nagel

Bildbearbeitung 2 – Woche 9

Aufgaben

I1: while 2 for

Schreibe den folgenden Code so um, dass statt einer while- eine for-Schleife verwendet wird:

I2: Digitale Pipette

Programmiere eine digitale Pipette: Lade ein Bild und zeige die Farbe des Pixels unter der Maus an. Lies dazu die Farbe des Bildpunkts an der aktuellen Mausposition aus, und verwende diese, um ein Rechteck zu zeichnen.

Variante: Verwende statt des normalen Mauszeigers ein Fadenkreuz (siehe cursor())

Variante: Speichere zusätzlich die letzte Farbe bei Mausklick, und zeige sie als zweites Rechteck an.

I3: Pixelmanipulationen

Verwende das unten stehende Programmgerüst, um verschiedene Pixelmanipulationen auszuprobieren.

Hinweis: Nimm auf jeden Fall ein sehr kleines Bild, etwa 100×100 Pixel groß. Sonst dauert die Berechnung zu lange.

Original

Invertiert

Graustufen


for-Schleife

Wie bereits bei der Einführung von Schleifen erwähnt, gibt es in Processing und anderen Programmiersprachen neben der bereits bekannten while-Schleife noch weitere Möglichkeiten, Wiederholungen auszuführen.
Mit Hilfe von for-Schleifen können wir Zählerschleifen erzeugen, also spezielle Schleifen, die eine Variable als Zähler verwenden und diesen verändern.

Die while-Schleife ist die grundlegendste Schleifenart. Im Folgenden betrachten wir, wie eine while-Schleife als for-Schleife umgesetzt werden kann:

while-Schleife und ...

for-Schleife mit mit Initialisierung, Test, Fortsetzung

Eine for-Schleife ist also dann sinnvoll und einer while-Schleife vorzuziehen, wenn genau solche Zählerschleifen realisiert werden sollen. Dann unterstützt uns diese kompaktere Schreibweise strukturierten, lesbareren Code zu erstellen.

Verschachtelte for-Schleifen

Jegliche Schleifen kann man natürlich auch kombinieren, d.h. ineinander verschachteln. Dann wird die innere Schleife so oft ausgeführt, wie die äußere vorgibt.

Der Beispielcode zeichnet farbige Rechtecke über den Zeichenbereich:

Pixelmanipulation

Durch die Manipulation von Pixeln können ganze Bilder verändert werden. Im Folgenden stelle ich detailliert die Processing-Funktionen vor, mit denen man Bilddaten (einzelne oder mehrere Pixel) auslesen kann. Nachdem so Bilddaten gelesen wurden, kann man diese Daten ändern und wieder auf der Zeichenfläche darstellen.

get(x, y)

color c = get(x, y);

Dank dieser Anweisung kann eine Pixelfarbe gelesen werden. Die Funktion gibt die Farbe (als color) des Bildpunktes an der angegebenen Position zurück.

Die Funktion get(x,y) ist ähnlich der Pipette (EyeDropper) in Photoshop.

get(x, y, width, height)

PImage img = get(x, y, w, h);

Diese Anweisung schneidet einen rechteckigen Bereich aus dem aktuellen Zeichenbereich. Dabei sind die Parameter identisch mit denen bei rect(x, y, w, h). Die Funktion gibt den Ausschnitt als PImage zurück.

Dies ist wie das Stempel-Werkzeug (Clone-Stamp) in Photoshop.

Beispiel

Hier kannst du das Stempel-Beispiel selbst ausprobieren.

Farbmanipulation

Möchte man die Farbe eines Pixels ändern, kann man verschiedene Funktionen verwenden, um die Eigenschaften einer Farbe auszulesen, und diese dann anzupassen.

red(), green(), blue()

float r = red(aColor);

Gibt den Rot-, Grün, bzw. Blau-Anteil einer Farbe zurück.
Man kann diese Funktionen für RGB, wie auch für HSB verwenden. Ist man im RGB-Modus, geben die Funktionen natürlich genau die Werte zurück, die man vorher eingestellt hat.

Verwendet man diese Farbfunktionen im Zusammenspiel mit get(x, y) können die Farben von Bildern verändert werden. Im folgenden Beispiel wird grün aus einem Bild extrahiert, in dem ausschließlich der Grün-Anteil jedes Pixels verwendet und gezeichnet wird.

hue()

float h = hue(aColor);

Gibt den Farbton einer Farbe zurück.
Man kann diese Funktionen für RGB, wie auch für HSB verwenden. Ist man im HSB-Modus, gibt diese Funktionen natürlich genau den Werte zurück, den man vorher als Farbton eingestellt hat.

saturation()

float s = saturation(aColor);

Gibt die Sättigung einer Farbe zurück.

brightness()

float b = brightness(aColor);

Gibt die Helligkeit einer Farbe zurück.

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

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