/* -------------------------------------------------------------------------------- Alba G.Corral (www.albagcorral.com) Diciembre 2006 remezcla de un ejemplo de joan soler-adillon ( www.joan.cat) -------------------------------------------------------------------------------- /* "Diseñando con código." En pocos segundos podemos crear imagenes con fotografía. Pulsar "s" para grabar la imagen. */ PImage a,img; int contador =0; //contador para contabilizar las imagenes guardadas int[] numerosx = new int[width]; int[] numerosy = new int[height]; // int altoRectangulo = 20; //altoRectangulo del dibujo de la foto boolean dibujando = false; //esta variable controla si estamos dibujando la foto o no String nombreImagen; //nombre de la imagen a dibujar void setup() { nombreImagen = "maria.jpg"; //tenemos la posibilidad de sacar la gama de colores de una imagen y que luego se visualice otra a = loadImage(nombreImagen); img = loadImage(nombreImagen); size(820,553); // size(a.width,a.height); background(0); smooth(); //cambiamos la velocidad de la pantalla, para ordenadores rapidos poner menos frameRate(5); } void draw() { dibujando= false; if(keyPressed) { if (key == 's' || key == 'S') { salvarImagen(); contador++; } } dibuixaEllipseOnSigui(width/20); } //-------------------------------------------------------------------// // funcions nostres //devuelve los pixeles blancos //-----------------------------------------------------------------// void dibuixaEllipseOnSigui(int tam){ int x = int(random(width)); int y = int(random(width)); int sz = int(random(tam)); int alfa = int(random(100)); int alfa2 = int(random(50)); color theColor = a.get(x,y); fill(theColor,alfa); stroke(153); ellipse(x,y,sz,sz); fill(theColor,alfa); noStroke(); ellipse(x+sz,y+sz,sz,sz); } void dibujaImagen(){ dibujando = true; //creamos un rectangulo que será el que dibuje la fotografia. Depende de la variable //altoRectangulo int xstart = 0; int ystart = constrain(mouseY-altoRectangulo/2,0,img.height); int xend = img.width; int yend = constrain(mouseY+altoRectangulo/2-10,0,img.height); loadPixels(); // recorremos el area del rectangulo y sacamos su color para rellenarlo despues for (int x = xstart; x < xend; x++) { for (int y = ystart; y < yend; y++ ) { int loc = x + y*img.width; float r,g,b; r = red (img.pixels[loc]); g = green (img.pixels[loc]); b = blue (img.pixels[loc]); float d = dist(x,y,mouseX,mouseY); color c = color(r,g,b); pixels[loc] = c; } } updatePixels(); } void salvarImagen(){ //salvamos una imagen cada vez con un numero diferente en la carpeta //la carpeta se genera con la fecha mas el nombre de la imagen mas un numero contador de imagenes int d = day(); // Values from 1 - 31 int m = month(); // Values from 1 - 12 int y = year(); String carpeta =d+"_"+m+"_"+y+"_"+nombreImagen.substring(0, nombreImagen.indexOf(".")); String nombre = nombreImagen.substring(0, nombreImagen.indexOf("."))+contador+".tif"; save(carpeta+"/"+nombre); println("------------ archivo '"+ nombre+"' guardado en carpeta:'"+carpeta +"'--"); } // eventos de INPUTS void mouseDragged() { dibujando= true; // println("dragged!"); dibujaImagen(); } void mouseMoved(){ if (!dibujando){ //dibujamos ellipses mas grandes dibuixaEllipseOnSigui(width/10); } }