Eloisa Herrera Imagen de puntitos
De Casiopea
Título | Eloisa Herrera Imagen de puntitos |
---|---|
Tipo de Proyecto | Proyecto de Curso |
Palabras Clave | tarea 8 |
Período | 2012-2012 |
Del Curso | Imagen Escrita 2012, |
Carreras | Arquitectura |
Alumno(s) | Eloísa Herrera |
Profesor | Herbert Spencer |
/* Imagen Escrita 2012: Construcción de un trazo (algoritmo pictórico de la luz y el color) */ import processing.pdf.*; PImage ritoque; // la foto: el encuadre, la escena, el paisaje PFont font; // la fuente tipográfica String[] code; // el texto del código /* Al exportar un PDF, Processing translada las unidades de pixeles a puntos tipográficos. 1 pt = 0.0352778 cm 1 cm = 28.346438837 pt */ float margenIzquierda = 30; float margenArriba = 20; float margenDerecha = 20; float margenAbajo = 20; float escala; void setup() { ritoque = loadImage("impresionista.jpg"); // se carga la imagen, se "construye" el objeto PImage ritoque size(609, 765, PDF, "impresionista.pdf"); // tamaño carta // cálculos para escalar desde la imagen hacia el pincel float ancho = width - (margenIzquierda + margenDerecha); escala = ancho/(float)ritoque.width; noStroke(); noLoop(); background(255); font = createFont("Courier", 6); // construyo la tipografía a partir de una fuente de sistema textFont(font, 6); code = loadStrings("trazo.pde"); // cargo el código "trazo" (el pincel) } void draw() { float spacer = 5; // Reducción de spacer mejora la resolución de la imagen resultante int i = 1; boolean cir = true; // muestreo regular desde la foto, esto se puede modificar.... for (int y = 0; y < ritoque.height; y += spacer) { if (cir) { i = 0; } for (int x = 0; x < ritoque.width; x += spacer) { // obtengo el color float plotX = map(x, 0, ritoque.width, margenIzquierda, width-margenDerecha); float plotY = map(y, 0, ritoque.height, margenArriba, margenArriba + (ritoque.height * escala)); color c = ritoque.get(x, y); trazo(plotX, plotY, c, spacer, i); if(i==1){i=0;} else {i=1;} } cir = cir == true ? false : true; } printCode(); println("----->PDF done!"); exit(); } void printCode() { float interlinea = 0; for (int i = 0; i < code.length; i++) { // escribo cada línea de código en la pantalla text(code[i], width/4, 2 * margenArriba + ritoque.height * escala + interlinea); interlinea += 15; } } /*************************************** trazo ****************************************/ /* Eloísa Herrera*/ void trazo(float x, float y, color c, float amp, int i) { fill(c); if(i == 1){ // al llamar al rectángulo, recentramos el dibujo (para que se alinee con los círculos); // recalculamos el ancho y alto para que tengan la misma área final que tendría si fuese círculo. // llamamos al brillo del color elegido para los cuadrados rect(x-map(brightness(c), 0, 255, amp, 0)*sqrt(PI)/2*1/2*1/2, y-map(brightness(c), 0, 255, amp, 0)*sqrt(PI)/2*1/2*1/2, map(brightness(c), 0, 255, amp, 0)*sqrt(PI)/2*1/2, map(brightness(c), 0, 255, amp, 0)*sqrt(PI)/2*1/2); } else { // las elipses seleccionan el hue del color elegido ellipse(x, y, map(hue(c), 0, 255, amp, 0)*1/2, map(hue(c), 0, 255, amp, 0)*1/2); }} // finalmente, los cuadrados realzan los brillos (lo que tiende a seleccionar colores mas oscuros) // los círculos tienden a rescatar, con mayor probabilidad, colores brillantes