Arrays y objetos

Hola! Quiero intentar hacer un sketch en el cual tenga distintos filtros con pixels para la camara, pero quisiera que estos aparezcan aleatoriamente cada vez que presiono “C”, el problema es que no se como simplificar este código. De momento tengo estos filtros como objetos y no como hacer un arreglo con todos estos objetos porque con el tiempo añadiré mas.

import processing.video.*;
ell[] ellipses;
pt[] puntos;
Capture cam;


void setup(){
 size(640,480); 
  cam= new Capture(this,640,480);
  cam.start();
  puntos=new pt[1000];
  for(int i =0; i<puntos.length;i++){
    puntos[i]=new pt();
  }
  ellipses = new ell [1000];
  for(int i = 0; i<ellipses.length;i++){
    
  ellipses[i]=new ell();
  }
  background(0);
}
void captureEvent(Capture cam){
  if(key=='c'){
cam.read();
}
}

void draw(){
  //for(int i = 0;i<ellipses.length;i++){
  // ellipses[i].display(); 
  // ellipses[i].move();
  //}
for(int i = 0;i<puntos.length;i++){
  puntos[i].disp();
}


fill(255);
  text("Press C to start",20,20);
}
class ell{
  float x,y,vx,vy;
  
  ell(){
   x= width/2;
   y=height/2;
   float a= random(TWO_PI);
   float speed=random(1,2);
   vx = cos(a)*speed;
   vy = sin(a)*speed;
  }
    void display(){
     noStroke();
     color c= cam.get(int(x),int(y));
     fill(c,25);
     ellipse(x,y,12,12);
    }
    void move(){
     x=x+vx;
     y=y+vy;
     if(y<0){
       y=height;
      
    }
    if(y > height){
    y=0;
}
if(x<0){
  x=width;
}
if(x>width){
  x=0;
    }
    }
}
class pt{
  float pointillize=50;
  pt(){
   
  }
  
void disp(){
   int x = int(random(cam.width));
  int y = int(random(cam.height));
  
    int loc = x + y*cam.width;
    loadPixels();
  float r = red(cam.pixels[loc]);
  float g = green(cam.pixels[loc]);
  float b = blue(cam.pixels[loc]);
  noStroke();
  

  fill(r,g,b,100);
  ellipse(x,y,pointillize,pointillize); 
  
  }
    
  }

este es el codigo que tengo de momento.
Gracias de antemano.

1 Like
  1. Un “filter” es un objeto con un método que toma una imagen y devuelve una imagen (PImage).
class Filter {
  PImage filter(PImage img) {
    return img;
  }
}
  1. una filterList es solo una lista de filtros:
ArrayList<Filter> flist = new ArrayList<Filter>();
  1. cree un nuevo filtro en su lista – y con el método de fiilter().
  // static filter
  flist.add(new Filter() {
    @Override public PImage filter(PImage img) {
      PImage result = img.copy();
      result.loadPixels();
      color c = color(0);
      for (int i=0; i<result.pixels.length; i++) {
        if (random(1)<0.2) result.pixels[i] = c;
      }
      result.updatePixels();
      return result;
    }
  }
  );
  1. Entonces, con flist.get(0):
PImage img = loadImage("https://upload.wikimedia.org/wikipedia/commons/thumb/2/2e/Processing_3_logo.png/480px-Processing_3_logo.png");
PImage out = flist.get(0).filter(img);  // filter
image(out, 0, 0);