Graphic Coding — Bildbearbeitung 2 — Woche 9

Zurück zur Übersicht, Aufgaben

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

	PImage foto;
	PImage ausschnitt;
	
	void setup() {
		size(400, 400);
		foto = loadImage("btk.jpg");
	}
	
	void draw() {
		image(foto, 0, 0);
		if (keyPressed) {
			ausschnitt = get(mouseX, mouseY, 50, 50);
		}
	}
	
	void mousePressed() {
		image(ausschnitt, mouseX, mouseY);
	}

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.

	for (int x = 0; x < width; x += 1) {
		for (int y = 0; y < height; y += 1) {
			color col = get(x, y);
			float g = green(col);
			color newCol = color(0, g, 0);
			stroke(newCol);
			point(x, y);
		}
	}

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.