GMU:Processing im Park/Part3

From Medien Wiki
< GMU:Processing im Park
Revision as of 14:05, 16 January 2016 by Ms (talk | contribs) (complex sorting example)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Image Sortin

Pixel Sorting

PImage img;
int id = 1;
int sortMode = 1;

void setup() {
  size(600, 400);
  reset();
}

void reset() {
    img = loadImage("winterpark.jpg");
}

void draw() {
  
  // load em
  img.loadPixels();
  
  color[] pxls = img.pixels;
  
  switch(sortMode) {
    case 1: 
      sortLeft(pxls);
      break;
    case 2:
      sortDown(pxls);
      break;
    case 3:
      sortUp(pxls);
      break;
  }
  
  
  // update em
  img.updatePixels();
  
  // show em
  image(img, 0, 0);
  

}


void sortLeft(color[] pxls) {
  
  // do something with the pixels (remix them)
  for(int y = 0; y < height; y++) {
    
    for(int x = 0; x < width-1 ; x++) {

      // get indices for left and right pixel
      int left = y * img.width + x;
      int right = y * img.width + (x+1);

       // bubble sort step ( exchange pixels according to saturation ... )
       int posx = mouseX - width / 2;
     
       if(green(pxls[right]) - green(pxls[left]) < posx) {
          // exchange color values of those pixels
          color tmp= pxls[right];
          pxls[right] = pxls[left];
          pxls[left] = tmp;
       }  
    }
  }
  
}

void sortDown(color[] pxls) {

  // do something with the pixels (remix them)
  for(int x = 0; x < width; x++) {
    
    for(int y = height - 2; y > 0 ; y--) {

      // get indices for left and right pixel
      int top = y * img.width + x;
      int bottom = (y+1) * img.width + x;
      
       // bubble sort step ( exchange pixels according to saturation ... )
       int posx = mouseX - width / 2;
     
       if(green(pxls[top]) - green(pxls[bottom]) < posx) {
          // exchange color values of those pixels
          color tmp= pxls[top];
          pxls[top] = pxls[bottom];
          pxls[bottom] = tmp;
       }  
    }
  }
}


void sortUp(color[] pxls) {

  // do something with the pixels (remix them)
  for(int x = 0; x < width; x++) {
    
    for(int y = 0; y < height -1 ; y++) {

      // get indices for left and right pixel
      int top = y * img.width + x;
      int bottom = (y+1) * img.width + x;
      
       // bubble sort step ( exchange pixels according to saturation ... )
       int posx = mouseX - width / 2;
     
       if(green(pxls[top]) - green(pxls[bottom]) < posx) {
          // exchange color values of those pixels
          color tmp= pxls[top];
          pxls[top] = pxls[bottom];
          pxls[bottom] = tmp;
       }  
    }
  }
  
}

void keyPressed() {
  switch(key) {
    case ' ':  
      reset();
      break;
    case 's':
      save("sorted-" + id +".jpg");
      id++;
      break;
    case '1':
      sortMode = 1;
      break;
    case '2':
     sortMode = 2;
     break;
    case '3':
     sortMode = 3;
     break;
  }
}