Februar 27, 2012
Mit Buchstaben und Zeichen sollte ein Bild entstehen. Hierbei mappte ich verschiedene Zeichen verscheidenen Hellikeiten (brightnes) zu. Somit werden z.B. alle schwarzen Flächen durch Punkte ersetzt, "o" als Grauwerte und "B"s übernehmen den part der hellen Flächen.PImage myImage; int trackingWidth = 8; String[] numbers = {".","_", "-", "o","e","B"}; int hell; int x,y; PFont font; void setup() { background(0); font = loadFont("Andalus-48.vlw"); textFont(font); textSize(trackingWidth); size(455, 600); myImage = loadImage("reto.jpeg"); } void draw() { //image(myImage, 0, 0); loadPixels(); //zeigt Pixel an for (x=0; x<width; x+=trackingWidth) //startet bei 0, geht in die Breite bis Ende erreicht ist, jeweils um 1px verschoben { for (y=0; y<height; y+=trackingWidth) // same with height { color c = getAverageColor(myImage,x,y,trackingWidth,trackingWidth ); hell = int(brightness(c)); int fin = int(map(hell,0,255,0,numbers.length-1)); //gerade zahlen machen String finfin = numbers[fin]; // holt das "fin"te zeichen aus dem array numbers und speichert es in finfin text(finfin,x,y); } } updatePixels(); } color getAverageColor(PImage img,int posX,int posY,int w,int h) { PVector farbeVector = new PVector(0, 0, 0); // zweckentfremdeter Vektor, von xyz-Position zu RGB quasi loadPixels(); //zeigt Pixel an for (int x=0; x<width; x++) //startet bei 0, geht in die Breite bis Ende erreicht ist, jeweils um 1px verschoben { for (int y=0; y<height; y++) // same with height { int loc = x+y*width; // loc=location damit richtiger Pixel ausgewählt wird if (x>=posX && x<=posX+w) // bereich auswählen für x { if (y>=posY && y<=posY+h) // bereich für y { farbeVector.add(red(img.pixels[loc]), green(img.pixels[loc]), blue(img.pixels[loc])); //vektordaten werden addiert } } } } updatePixels(); farbeVector.div(sq(trackingWidth+1)); // vektor farben werden dividiert return(color(farbeVector.x,farbeVector.y,farbeVector.z)); }