Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2018-04-09 14:00:38 Sketch processing interaction souris et get()

Pascalle
membre
Date d'inscription: 2016-01-21
Messages: 11

Sketch processing interaction souris et get()



Bonjour, je suis à la recherche d'un sketch d'exemple Processing que je ne parviens pas à retrouver. Si quelqu'un trouve à tout hasard le sketch en question avec ma description ça m'aiderait beaucoup!
Le sketch débute avec une grosse ellipse, qui correspond à un pixel global de l'image (faisant surement intervenir get()). Puis, le survole de la souris sur cette ellipse permet de la diviser en quatre autres ellipses augmentant ainsi au fur et à mesure de l'intervention de la souris sur les ellipses la résolution de l'image que l'on finit par reconnaitre.

Merci beaucoup pour votre aide !

Hors ligne

 

#2 2018-04-09 22:10:15 Re : Sketch processing interaction souris et get()

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: Sketch processing interaction souris et get()



Bonsoir,

C'est surement cela que tu souhaites faire :

ArrayList<Cellule> cellules;
PImage photo, fond;

void setup() {
  size(512, 512);
  cellules = new ArrayList<Cellule>();
  photo = loadImage("data/Elephant.jpg");
  fond = createImage(512, 512, RGB);
  fond.copy(photo, 0, 0, photo.height, photo.height, 0, 0, 512, 512);
  fond.loadPixels();
  int rouge = 0;
  int vert = 0;
  int bleu = 0;
  for (int i = 0; i < fond.pixels.length; i++) {
    rouge += fond.pixels[i] >> 16 & 0xFF;
    vert += fond.pixels[i] >> 8 & 0xFF;
    bleu += fond.pixels[i] & 0xFF;
  }
  color nCouleur = color(rouge / fond.pixels.length, vert / fond.pixels.length, bleu / fond.pixels.length);
  cellules.add(new Cellule(0, 0, 512, 512, nCouleur, 0)); 
  noStroke();
}

void draw() {
  background(255);
  for (Cellule cel : cellules) {
    cel.dessine();
  }
  //image(fond, 0, 0);
}

class Cellule {
  int largeur, hauteur;
  int x, y;
  color couleur;
  int profondeur;

  Cellule(int _x, int _y, int _largeur, int _hauteur, color _couleur, int _profondeur) {
    x = _x;
    y = _y;
    largeur = _largeur;
    hauteur = _hauteur;
    couleur = _couleur;
    profondeur = _profondeur;
  }

  void dessine() {
    fill(couleur);
    ellipse(x + largeur /2, y + hauteur / 2, largeur, hauteur);
    //rect(x, y, largeur, hauteur);
  }

  boolean souris(int sourisX, int sourisY) {
    return (sqrt(sq(sourisX - (x + largeur / 2)) + sq(sourisY - (y +largeur / 2))) < largeur / 2);
    //return ((sourisX > x) && (sourisX < x + largeur) && (sourisY > y) && (sourisY < y + hauteur));
  }
}

void mouseMoved() {
  for (Cellule cel : cellules) {
    if (cel.souris(mouseX, mouseY) && cel.profondeur < 7) {
      int rouge = 0;
      int vert = 0;
      int bleu = 0;      
      int taille = cel.largeur / 2 * cel.hauteur / 2;
      for (int i = cel.x; i < cel.x + cel.largeur / 2; i++) {
        for (int j = cel.y; j < cel.y + cel.hauteur / 2; j++) {
          rouge += fond.pixels[j * width + i] >> 16 & 0xFF;
          vert += fond.pixels[j * width + i] >> 8 & 0xFF;
          bleu += fond.pixels[j * width + i] & 0xFF;
        }
      }
      color col = color(rouge / taille, vert / taille, bleu / taille);
      cellules.add(new Cellule(cel.x, cel.y, cel.largeur / 2, cel.hauteur / 2, col, cel.profondeur + 1));

      rouge = 0;
      vert = 0;
      bleu = 0;      
      for (int i = cel.x + cel.largeur / 2; i < cel.x + cel.largeur; i++) {
        for (int j = cel.y; j < cel.y + cel.hauteur / 2; j++) {
          rouge += fond.pixels[j * width + i] >> 16 & 0xFF;
          vert += fond.pixels[j * width + i] >> 8 & 0xFF;
          bleu += fond.pixels[j * width + i] & 0xFF;        }
      }
      col = color(rouge / taille, vert / taille, bleu / taille);
      cellules.add(new Cellule(cel.x + cel.largeur / 2, cel.y, cel.largeur / 2, cel.hauteur / 2, col, cel.profondeur + 1));

      rouge = 0;
      vert = 0;
      bleu = 0; 
      for (int i = cel.x; i < cel.x + cel.largeur / 2; i++) {
        for (int j = cel.y + cel.hauteur / 2; j < cel.y + cel.hauteur; j++) {
          rouge += fond.pixels[j * width + i] >> 16 & 0xFF;
          vert += fond.pixels[j * width + i] >> 8 & 0xFF;
          bleu += fond.pixels[j * width + i] & 0xFF;        }
      }
      col = color(rouge / taille, vert / taille, bleu / taille);
      cellules.add(new Cellule(cel.x, cel.y + cel.hauteur / 2, cel.largeur / 2, cel.hauteur / 2, col, cel.profondeur + 1));

      rouge = 0;
      vert = 0;
      bleu = 0; 
      for (int i = cel.x + cel.largeur / 2; i < cel.x + cel.largeur; i++) {
        for (int j = cel.y + cel.hauteur / 2; j < cel.y + cel.hauteur; j++) {
          rouge += fond.pixels[j * width + i] >> 16 & 0xFF;
          vert += fond.pixels[j * width + i] >> 8 & 0xFF;
          bleu += fond.pixels[j * width + i] & 0xFF;        }
      }
      col = color(rouge / taille, vert / taille, bleu / taille);
      cellules.add(new Cellule(cel.x + cel.largeur / 2, cel.y + cel.hauteur / 2, cel.largeur / 2, cel.hauteur / 2, col, cel.profondeur + 1));
      cellules.remove(cel);
      break;
    }
  }
}

Avec comme image :
http://codelab.fr/up/Elephant.jpg

Pour quel projet souhaites-tu l'utiliser ?

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024