...
Code Block |
---|
title | Beispiel |
---|
collapse | true |
---|
|
void setup() {
size(200600, 200400);
}
void draw() {
loadPixels();
for(int x=0; x<width; x++) {// loop through all rows
for for(int y=0; y<height; y++) {
// loop through intall loccolumns = x+y*width;per row
for (int x=0; x<width; x++) {
if(x%2 == 0) {// calculate pixel location in list
pixels[loc] = color(255); int loc = y*width + x;
}
else { // set color depending pixels[loc] =on if color(0); is dividable by two (even, odd)
} } if (x%10 == 0) {
pixels[loc] = color(255);
} else {
updatePixels(pixels[loc] = color(0);
}
}
}
updatePixels();
}
|
Wenn wir das für jeden zweiten zenten x-Wert machen erhalten wir beispielsweise folgendes Bild:
Image RemovedImage Added
Aufgaben
- Versucht andere Muster mit Hilfe des Pixel-Arrays zu zeichnen.
- Versucht folgendes Muster mit der gelernten Methode zu zeichnen:
...
Im folgenden Beispiel verwenden wir die gelernten Funktionen um ein Bild gröber aufzulösen.:
Code Block |
---|
title | Beispiel |
---|
collapse | true |
---|
|
PImage myImage;
int pixelSize = 10;
void setup() {
size(200600, 200400);
myImage = loadImage("EinBild.png");
myImage.loadPixels();
}
void draw() {
myImage.loadPixels();
forint size = mouseX/10+1;
for(int x=0; x<width; x+=pixelSizesize) {
for(int y=0; y<height; y+=pixelSizesize) {
int loc = x+y*width;
color c = myImage.pixels[loc];
fill(c);
noStroke();
rect(x, y, pixelSizesize, pixelSizesize);
}
}
} |
Flashlight
Image Added
Im folgenden Beispiel verändern wir die Helligkeit der Pixel durch die Position der Maus:
Code Block |
---|
title | Beispiel |
---|
collapse | true |
---|
|
PImage myImage;
void setup() {
size(600, 400);
myImage = loadImage("EinBild.png");
}
void draw() {
loadPixels();
myImage.loadPixels();
PVector mousePos = new PVector(mouseX, mouseY);
PVector currPixel = new PVector(0, 0);
for (int x=0; x<width; x++) {
for (int y=0; y<height; y++) {
int loc = x+y*width;
currPixel.x = x;
currPixel.y = y;
float r = red(myImage.pixels[loc]);
float g = green(myImage.pixels[loc]);
float b = blue(myImage.pixels[loc]);
float distance = mousePos.dist(currPixel);
float brightness = (100-distance)/100;
r*=brightness;
g*=brightness;
b*=brightness;
r = constrain(r, 0, 255);
g = constrain(g, 0, 255);
b = constrain(b, 0, 255);
color c = color(r, g, b);
pixels[loc] = c;
}
}
updatePixels();
}
|
Threshold
Image Added
Im folgenden Beispiel zeichnen wir ein Schatz-Weiss Bild welches auf bestimmte Grenzwerte abgestimmt ist. Ausserdem zeichnen wir in diesem Beispiel nicht auf die Zeichenfläche direkt, sondern initialisieren ein neues “leeres” Bild auf dem wir dann zeichen:
Code Block |
---|
destImage = createImage(width, height, }
}
} |
Flashlight
Image Removed
Im folgenden Beispiel verändern wir die Helligkeit der Pixel durch die Position der Maus.
RGB);
destImage.pixels[loc] = color(255); |
Folgend das komplette Processing-Sketch:
Code Block |
---|
title | Beispiel |
---|
collapse | true |
---|
| PImage myImage |
PImage myImage;
PImage destImage;
int threshold = 100;
void setup() {
size(200, 200);
myImage = loadImage("EinBild.png");
destImage = createImage(width, height, RGB);
}
void draw() {
myImage.loadPixels();
myImagedestImage.loadPixels();
PVector mousePos = new PVector(mouseX, mouseY);
PVector currPixel = new PVector(0, 0)threshold = mouseX;
for(int x=0; x<width; x++) {
for(int y=0; y<height; y++) {
int loc = x+y*width;
currPixel.x = x;if(brightness(myImage.pixels[loc])<threshold) {
currPixel.ydestImage.pixels[loc] = ycolor(255);
} else {
float r = red(myImagedestImage.pixels[loc]); = color(0);
}
}
}
float
g = red(myImage.pixels[loc]destImage.updatePixels();
float b = red(myImage.pixels[loc]);
float distance = mousePos.dist(currPixel);
float brightness = (50-distance)/50;
r*=brightness;
g*=brightnessimage(destImage, 0, 0);
} |
Simple Sobel
Image Added
Im letzten Beispiel verwenden wir einen Filter um Kanten zu erkennen. Dazu vergleichen wir immer den aktuellen Pixel mit seinen Nachbarn:
Code Block |
---|
title | Beispiel |
---|
collapse | true |
---|
|
PImage myImage;
PImage destImage;
void setup() {
size(200, 200);
myImage = loadImage("EinBild.png");
destImage = createImage(width, height, RGB);
}
void draw() {
myImage.loadPixels();
destImage.loadPixels();
for(int b*x=brightness1; x<width; x++) {
for(int y=0; r = constrain(r,0,255);y<height; y++) {
int gcurrLoc = constrain(g,0,255)x+y*width;
bcolor currColor = constrain(b,0,255)myImage.pixels[currLoc];
colorint cprevLoc = color(r,g,b);
(x-1)+y*width;
color prevColor = myImage.pixels[prevLoc];
pixels[loc] = c;float difference = abs(brightness(currColor)-brightness(prevColor));
} } destImage.pixels[currLoc] = updatePixelscolor(difference);
} |
Threshold
Image Removed
Im folgenden Beispiel zeichnen wir ein Schatz-Weiss Bild welches auf bestimmte Grenzwerte abgestimmt ist. Ausserdem zeichnen wir in diesem Beispiel nicht auf die Zeichenfläche direkt, sondern initialisieren ein neues “leeres” Bild auf dem wir dann zeichen:
Code Block |
---|
destImage = createImage(width, height, RGB);
destImage.pixels[loc] = color(255);
}
}
destImage.updatePixels();
image(destImage, 0, 0);
} |
Weitere Beispiele
Line Art
Image Added
Code Block |
---|
title | Beispiel |
---|
collapse | true |
---|
| PImage myImage;
PImage destImage;
int threshold = 100 |
PImage myImage;
void setup() {
size(2001920, 2001080);
myImage = loadImage("EinBildGradient_3.png");
destImage = createImage(width, height, RGBsmooth();
}
void draw() {
myImage.loadPixels();
destImage.loadPixelsbackground(0);
// thresholdimage(myImage,0,0);
int steps = mouseX; + 4;
for for(int x=0; x<width; x++=steps) {
for (int y=0; y<height; y++=steps) {
int loc = x+y*width;
float bright = brightness(myImage.pixels[loc]);
if(brightness( color c = myImage.pixels[loc])<threshold) {;
pushMatrix();
translate(x, y);
rotate(radians((bright/255)*360));
destImage.pixels[loc] = colorstroke(255c);
}strokeWeight(2);
else { line((bright/255)*-50, destImage.pixels[loc] = color(0, (bright/255)*50, 0);
}popMatrix();
}
}
destImage.updatePixels(); image(destImage, 0, 0updatePixels();
} |
...
ASCII Art
Image Removed
Im letzten Beispiel verwenden wir einen Filter um Kanten zu erkennen. Dazu vergleichen wir immer den aktuellen Pixel mit seinen Nachbarn.
Image Added
Code Block |
---|
title | BeispielSketch |
---|
collapse | true |
---|
|
PImage myImage;
PImage destImagemyImage;
void setup() {
size(200900, 200900);
myImage = loadImage("EinBildMarilyn.pngjpg");
destImage = createImage(width, height, RGBsmooth();
}
void draw() {
myImage.loadPixels();
background(0);
// destImage.loadPixels(image(myImage,0,0);
int steps = mouseX+10;
for (int x=10; x<width; x++=steps) {
for (int y=0; y<height; y++=steps) {
int currLocloc = x+y*width;
colorfloat currColorbright = brightness(myImage.pixels[currLocloc]);
color c = myImage.pixels[loc];
int prevLoc = fill(x-1)+y*widthc);
color prevColor = myImage.pixels[prevLoc]textSize(map(bright,0,255,0,50));
float differenceString ascii = absCharacter.toString(brightness(currColorchar)-brightness int(prevColorbright));
destImage.pixels[currLoc] = color(differencetext(ascii,x,y);
}
}
destImage.updatePixels(); image(destImage, 0, 0updatePixels();
} |
Aufgaben
- Lest und versteht Seite 270 – 272 (Convolution Filter) im Buch “Learning Processing” von Daniel Shiffman.
- Schaut euch die Beispiele zu Bildern unter Generative Gestaltung an.
- Erstellt ein Beispiel, welches euch das Histogramm eines Bildes visuell wieder gibt. (R,G,B,Brightness).
- Erstellt ein Beispiel, welches für bestimmte Helligkeitswerte einen Buchstaben zeichnet.
...