Jaime Pérez Moena: Presentación al Lenguaje Abierto

De Casiopea




TítuloPresentación al Lenguaje Abierto, Cuarto Año
Período2011-
Alumno(s)Jaime Pérez Moena
ProfesorHerbert Spencer, Marcelo Araya

Creación de un autorretrato desde Processing

A partir del código "Paisaje" que nos entrega Herbert, desde Processing, se realiza una variación de éste para generar un nuevo pincel. Con una fotografía de 500 x 178 píxeles, el código toma la información del color y lo transforma en trazos con una dirección y sentido en particular. El resultado, son grupos de trazos inscritos en superficies cuadradas. Luego el archivo es impreso a un tamaño real.

Previsualización de la Lámina
<no wiki>
import processing.pdf.*;
PImage paisaje;

float margenIzquierda = 85; 
float margenArriba    = 85;
float margenDerecha   = 85;

float escala;
boolean pinta;
int x, y;

void setup() {
  paisaje = loadImage("jaime.jpg"); 
  size(1100, 500); 
  smooth();
  beginRecord(PDF, "retrato"+day()+hour()+minute()+".pdf");

  float ancho = width - (margenIzquierda + margenDerecha);
  escala = ancho / (float)paisaje.width;
  strokeCap(SQUARE);
  background(255);
  x = y = 0;
  pinta = true;
}


void draw() {
  float spacer = 8;

  float plotX = map(x, 0, paisaje.width, margenIzquierda, width-margenDerecha);
  float plotY = map(y, 0, paisaje.height, margenArriba, margenArriba + (paisaje.height * escala));

  color c = paisaje.get(x,y);
  if(pinta) pincel(plotX, plotY, c, spacer);

  if (x < paisaje.width - spacer) {
    x+= spacer;
  }
  else if(y < paisaje.height) {
    x = 0; 
    y += spacer;
  }

  if (y > paisaje.height) {
    println("listo!");
    endRecord();
    pinta = false;
    
  }
}

void pincel(float x, float y, color c, float amp) {

  int achurados = (int)map(brightness(c), 100, 255, 100, 10);

  for (int i = 0; i < achurados; i++) {
    pushMatrix();
    {
      translate(x + random(-amp,amp), y + random (-amp,amp)); 
      rotate(hue(c)/100 * HALF_PI);
      strokeWeight((255 - brightness(c))/100 * amp/10);

      stroke(c, 100);
      noFill();
      float largo = brightness(c)/255 * amp;
      beginShape();
      vertex(-amp/30, 0);
      bezierVertex(-largo, -saturation(c)/55, amp/8, saturation(c)/55, largo, 0);
      endShape();
    }
    popMatrix();
  }
}
</no wiki>