Willkommen auf unserem Seminar-Blog

Immer auf dem aktuellen Stand bleiben

Dieser Seminar-Blog befindet sich noch im Aufbau und wird in den kommenden Tagen entsprechend verfeinert.

Member Login

Lost your password?

Registration is closed

Sorry, you are not allowed to register by yourself on this site!

You must either be invited by one of our team member or request an invitation by email at viad.info {at} zhdk {dot} ch.

ASCII

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));


}