processing - lmu medieninformatik · img = loadimage("test.jpg");} pimage die klasse...

39
PROCESSING BILDER UND SOUND Created by Michael Kirsch & Beat Rossmy

Upload: others

Post on 09-Oct-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

PROCESSINGBILDER UND SOUND

Created by Michael Kirsch & Beat Rossmy

Page 2: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

INHALT1.

1. 2. 3. 4.

2. 1. 2. 3. 4. 5.

RückblickProcessing BasicsVererbungInterfacesVererbung & Interfaces

TheorieBilderWas ist ein Pixel?PImageModuloBibliotheken

3. 1.

4. 1. 2. 3.

5. 1. 2.

AnwendungImage

VerknüpfungBibliothekenSoundFileData

AusblickNächste SitzungÜbung

Page 3: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

RÜCKBLICK

Page 4: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

PROCESSING BASICSTransformations

Verschieben

Rotieren

Scale

int x = 300;int y = 200;translate(x, y);rect(200,200,200,200);

rotate(PI/2);rect(200,200,200,200);

scale(2.0);rect(200,200,200,200);

Page 5: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

PROCESSING BASICSTransformations

verhindere Auswirkung derTransformation aufnachfolgende Objekte

pushMatrix();translate(200,200);rect(0,0,200,200);popMatrix();

pushMatrix();translate(100,300);rect(0,0,200,200);popMatrix();

Page 6: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

PROCESSING BASICSTabs

Tabs helfen deinen Sketch zuorganisieren. Es bietet sich anfür Klassen neue Tabsanzulegen.Klicke auf den ▼ neben demSketch Namen und wähle"Neuer Tab". Benenne diesenso, dass nachvollziehbar ist,was der Tab enthält.

void setup () {...}

void draw () {...}

// -------------------// Klasse -> neuer Tab

class Ball {...}

// -------------------// Klasse -> neuer Tab

class Wall {...}

Page 7: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

VERERBUNG

Vererbung beschreibt dasKonzept, dass sich vieleKlassen von einerElternklasse ableitenlassen, bzw. dieseerweitern.

Dabei kann eine Klasseviele Kinder haben, abernur eine Elternklasse! http://blogs.scientificamerican.com/blogs/assets/tetrapod-zoology/File/placentals-molecular-phylogeny-

600-px-tiny-July-2015-Darren-Naish-Tetrapod-Zoology(1).jpg

Page 8: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

VERERBUNG

Vererbung bedeutet imDetail, dass alle Felder undMethoden derElternklasse Teil derKindklasse sind.

Weitere Felder undMethoden können ergänztwerden.

Der Inhalt von Methodenkann überschrieben (→verändert) werden.

class Parent { int a,b,c; public Parent () { a = 0; b = 1; c = 2; } void out () {}}

class Child extends Parent { // erbt: Felder a,b,c int d,e,f; public Child () { d = 3; e = 4; f = 5; } // überschreibt: out void out () { println(a+" "+b+" "+c); }}

Page 9: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

INTERFACES

Mit Interfaces lassen sichSchnittstellen zwischenKlassen definieren.

Man bestimmt, dass eseine bestimmteFunktionalität (in Formeiner Methode) in einerKlasse gibt, die genaueUmsetzung wird abernicht vorgegeben.

http://nos.twnsnd.co/image/127563852947

Page 10: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

INTERFACES

In der Beschreibung desInterfaces werden alle zuimplementierendenMethoden aufgelistet, mitRückgabetyp, Name undÜbergabeParameter.

Die Funktionalität wirderst in der implemen -tierenden Klasseumgesetzt.

interface Output { void out ();}

class TextOut implements Output { String text; public Child () { text = "Hello?"; } void out () { println(text); }}

class ShapeOut implements Output { public ShapeOut () {} void out () { rect(100,100,50,50); }}

Page 11: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

VERERBUNG & INTERFACES

Interfaces undElternklassen können alsTypen bei Arraysverwendet werden.

So können z.B. Klassender unterschiedlichstenArt, aber mit sichdeckender Funktionalitätin einem Arraygespeichert werden.

interface Output {...}

class Haus implements Output {...}class Auto implements Output {...}class Baum implements Output {...}

Output[] o;

void setup () { size(600,400); o = new Output[]{ new Haus(...), new Auto(...), new Baum(...) }; for (int i=0; i<o.length; i++) { o[i].out(); }}

Page 12: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

THEORIE

Page 13: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

BILDER

Ein wichtiger Bestandteilvon grafischenProgrammen ist dieDarstellung undManipulation von Bildern.

Kommerzielle Lösungenbieten eine breite Palettean Bearbeitungstools undvorgefertigtenFiltern/Effekten.

http://nos.twnsnd.co/image/123557322230

Page 14: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

BILDER

Was sind Bilder?

Ein digitales Bild ist eineAnsammlung von Pixeln.Also ein Raster vonwinzigen Farbpunkten.

Mathematisch können wirdie Positionen in einemRaster mit Koordinatenangeben, oder wirnummerieren alle Punkteeinzeln durch.

Page 15: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

BILDER

In Processing hat jedesPixel eines Bildes eineNummer.

Wir beginnen im linkenoberen Eck mit der Ziffer 0und enden im rechtenunteren Eck mit dergrößten Zahl.

Wir rechnen:Breite * Höhe = Anzahlaller Pixel

Page 16: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

WAS IST EIN PIXEL?

Ein Bild ist eine Menge anPixeln.

Ein Pixel entspricht einerFarbe an einer Position.

In Processing ist dies alscolor[] gelöst.

Die Länge des Arraysentspricht der Anzahl allerPixel.

Page 17: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

PIMAGE

Die Klasse PImageermöglicht es uns Bilder inProcessing zu laden undzu manipulieren.

Um ein Bild zu ini tiali -sieren benutzen wirloadImage. Als Para -meter wird der Dateipfaddes Bildes übergeben.

Tipp: speichere Bilder imSketch-Ordner → kurzerPfad

// Bild deklarierenPImage img;

void setup () { size(600,400); // initialisiere Bild img = loadImage("test.jpg");}

Page 18: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

PIMAGE

Die Klasse PImageermöglicht es uns Bilder inProcessing zu laden undzu manipulieren.

Um ein Bild zu ini tiali -sieren benutzen wirloadImage. Als Para -meter wird der Dateipfaddes Bildes übergeben.

Tipp: speichere Bilder imSketch-Ordner → kurzerPfad

// Bild deklarierenPImage img;

void setup () { size(600,400); // initialisiere Bild img = loadImage("test.jpg");}

void draw () { background(); image(img);}

Page 19: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

PIMAGE

Das Bild kann gezeichnetwerden, indem der Befehlimage() mit einemPImage Objekt alsParameter aufgerufenwird.

Zugriff auf die Pixel erhältman, indem man auf dasArray pixels auf demObjekt zugreift.

So können Werte gelesenund verändert werden.

// Bild deklarierenPImage img;

void setup () { size(600,400); // initialisiere Bild img = loadImage("test.jpg");}

void draw () { background(); // speichere einen roten Pixel an Stelle 100 img.pixels[100] = color(255,0,0); image(img);}

Page 20: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

PIMAGE

Änderungen am PixelArray müssen mit einemAufruf der MethodeupdatePixels()sichtbar gemacht werden.

// Bild deklarierenPImage img;

void setup () { size(600,400); // initialisiere Bild img = loadImage("test.jpg");}

void draw () { background(); // speichere einen roten Pixel an Stelle 100 img.pixels[100] = color(255,0,0); // mache Änderungen sichtbar img.updatePixels(); image(img);}

Page 21: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

MODULO

Wie kann ich aufbestimmte Pixelzugreifen? Z.B. Alle Pixelam linken Bildrand?

Oder jeden 2. Pixel, jeden10. Pixel, ...

Wie kann ich Pixelzeilenoder -spalten im Bildbehandeln?

Page 22: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

MODULO

Wir erinnern uns: Alle Pixelsind in einem Arrayabgelegt.

Um eine Zeile zu behan -deln, muss dieses Arrayquasi in regelmäßigenAbständen zerschnittenwerden.

Vorgehen: Teilt man denIndex des Pixels durch dieBreite (in Pixel) des Bildes,so erhält man die Zeile, inder sich der Pixel befindet.

PImage img;int w,h;

void setup () { size(600,400); img = loadImage("test.jpg"); w = img.width; h = img.height; // w*h == img.pixels.length}

// In welcher Zeile liegt 100?// Wenn das Bild 47px breit ist?

// int zeile = 100/47 -> Zeile 2!// ohne Kommastellen wegen int// erste Zeile hat Index 0!

Page 23: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

MODULO

Wie können wir die Spalteerrechnen?

Mathematisch können wirdies wie folgenderrechnen:Index - Zeile*Breite

Oder mit einem neuenOperator!

PImage img;int w,h;

void setup () { size(600,400); img = loadImage("test.jpg"); w = img.width; h = img.height;}

// In welcher Zeile liegt 100?// Wenn das Bild 47px breit ist?

// int zeile = 100/47 -> Zeile 2!// ohne Kommastellen wegen int// erste Zeile hat Index 0!

Page 24: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

MODULO

Der Modulo-Operatorliefert den ganzzahligenRest einer Division!

In Worten: Wenn ich eineZahl durch eine andereteile, wie groß ist derAbstand zu der nächstkleineren Zahl, die (glatt)teilbar ist?

4%2 = 0

// 5 ist nicht rund teilbar// die nächste teilbare Zahl ist 4// die Differenz beträgt 15%2 = 1

6%2 = 0

...

3%3 = 0

4%3 = 1

5%3 = 2

6%3 = 0

...

Page 25: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

BIBLIOTHEKEN

Muss man das Rad immerneu erfinden?

Die meisten Probleme hatjemand anderes dochsicher schon bessergelöst?

// Wir möchten Sound

// auf die Kinect reagieren

// Quellen aus dem Internet

void setup () {}

void draw () {}

Page 26: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

BIBLIOTHEKEN

Bibliotheken erlauben esuns Funktionalitäten zubenutzen, die Processingstandardmäßig nichtbeherrscht.

Bibliotheken sind nichtsanderes als eineSammlung von Klassen,die eine BestimmteFunktionalitätermöglichen.

// Wir möchten Sound

// auf die Kinect reagieren

// Quellen aus dem Internet

void setup () {}

void draw () {}

Page 27: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

BIBLIOTHEKEN

Im Menüpunkt Sketchunter dem Punkt Library importieren ...findet man den bereitsintegrierte Bibliotheken.

Im selben Menü könnenexterne Bibliothekeneinfach eingebundenwerden. Man wähltLibrary hinzufügen...und kann externeBibliothekenherunterladen.

import processing.sound.*;

// auf die Kinect reagieren

// Quellen aus dem Internet

void setup () {}

void draw () {}

Page 28: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

ANWENDUNG

Page 29: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

IMAGEVertausche Pixel!

// deklariere Bild

void setup () { // lade Bild}

void draw () { // Wähle zufälligen Pixel // Tausche Farbe mit anderem zufälligem Pixel

}

Page 30: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

VERKNÜPFUNG

Page 31: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

BIBLIOTHEKEN

Um nun Sound einbindenzu können, müssen wireine Bibliothek mit demNamen Soundimportieren.

Dazu laden wir dieseherunter, und importierensie anschließend über dasMenü Sketch.

Nun können wir dieBibliothek verwenden.

import processing.sound.*;

Animation[] animations;

void setup () { ...}

void draw () { ...}

Page 32: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

SOUNDFILE

Nun wird der KlasseAnimation im Konstruktorein SoundFileübergeben, das in einemFeld abgelegt und somitabrufbar ist.

Dieser Sound wird nun intriggerOn gestartet.

class Animation implements Plotable, Triggerable { int animationCounter; char triggerKey; SoundFile sound; public Animation (char c, SoundFile s) { triggerKey = c; animationCounter = 0; sound = s; } void triggerOn (char c) {...} void triggerOff (char c) {...} void plot () {}}

Page 33: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

SOUNDFILE

Der Methodenaufrufplay() auf demSoundFile startet dieWiedergabe des Sounds.

Wo erzeugen wir dasObjekt, das im Konstruktorübergeben werden soll?

class Animation implements Plotable, Triggerable { int animationCounter; char triggerKey; SoundFile sound; public Animation (char c, SoundFile s) {...} void triggerOn (char c) { if (triggerKey == c) { animationCounter = 1; sound.play(); } } void triggerOff (char c) {...} void plot () {}}

Page 34: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

SOUNDFILE

Wir erzeugen dasSoundFile Objekt direktim Konstruktoraufruf.

Als zweiten Paramterübergeben wir denDateipfad.

Als ersten Parameterthis. Dies bezieht sich indiesem Fall auf unserenSketch.

Animation[] animations;

void setup () { animations = new Animation[]{ new Animation('1',new SoundFile(this,"DateiName.mp3")); }

}

void draw () {...}

void keyPressed () {...}

void keyReleased () {...}

Page 35: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

DATA

Im Sketchordner könnenwir einen Ordner mit demNamen data erezugen.

Dateien in diesem Ordnerkönnen direkt mit demNamen referenziertwerden.

Animation[] animations;

void setup () { animations = new Animation[]{ new Animation('1',new SoundFile(this,"DateiName.mp3")); }

}

void draw () {...}

void keyPressed () {...}

void keyReleased () {...}

Page 36: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

AUSBLICK

Page 37: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

NÄCHSTE SITZUNG

Page 38: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

ÜBUNG

Page 39: PROCESSING - LMU Medieninformatik · img = loadImage("test.jpg");} PIMAGE Die Klasse PImage ermöglicht es uns Bilder in Processing zu laden und zu manipulieren. Um ein Bild zu initiali-sieren

QUELLENhttp://blogs.scientificamerican.com/blogs/assets/tetrapod-zoology/File/placentals-molecular-phylogeny-600-px-tiny-July-2015-Darren-Naish-Tetrapod-Zoology(1).jpg

http://nos.twnsnd.co/image/127563852947

http://nos.twnsnd.co/image/123557322230