Voir la vie en noir et en jaune et en diagonale

De Centre de Ressources Numériques - Labomedia
Aller à : navigation, rechercher
Voir la vie en noir et en jaune et en diagonale
Jaune noir diagonale.png


Pour modifier la page utiliser l'onglet Modifier avec formulaire.

Résumé Filtre vidéo
Auteur(s) Olivier
Licence CC-BY-SA 3
Date de création 20 novembre 2014


Intentions / Contexte

Rendre hommage au site http://codelab.fr

Principe de fonctionnement

En fonction de la luminosité, le filtre affiche un motif dans un sens ou dans l'autre.

Besoins / Compétences

Développement en Processing

Documentation

Le motif "carre.gif" est celui-ci : Carre.gif

    // Ce script permet appliquer un effet sur une vidéo  
    // En l'occurence, il affiche un motif dans un sens   
    // ou dans l'autre en fonction de la luminosité.  
      
    // copyright Olivier Baudu 2014 pour le http://labomedia.net  
    // Publié sous les termes de la license GPL v3.0  
      
    import processing.video.*;  
    import controlP5.*;  
      
    Carre[] motif;  
    Capture cam;  
      
    Boolean save;  
    int non_modifiable;  
    int wait;  
    int start_frame;  
      
    PImage carre;  
      
    ControlP5 cp5;  
    float contraste = 0.2;  
      
    void setup() {  
      
      motif = new Carre[1200*4];   
      save = false;  
      wait = 0;  
      
      size(800, 600);  
      frameRate(30);  
      imageMode(CENTER);  
      
      cam = new Capture(this, 640, 480);  
      cam.start();  
      
      carre = loadImage("carre.gif");  
      
      for (int i = 0; i < motif.length; i++) {  
        motif[i] =  new Carre(i);  
      }  
      
      //Slider  
      cp5 = new ControlP5(this);  
      cp5.addSlider("contraste")  
        .setPosition(20, 20)  
          .setColorBackground(0)  
            .setColorActive(color(255, 0, 0))  
              .setColorForeground(color(150, 150, 150))  
                .setColorCaptionLabel(color(150, 150, 150))  
                  .showTickMarks(true)  
                    .setRange(0, 1)  
                      ;  
    }  
      
    void draw() {  
      
      if (cam.available() == true) {  
        cam.read();  
        cam.filter(THRESHOLD, contraste);  
      }  
      
      // Pour chaque élément du tableau...  
      for (int i = 0; i < motif.length; i++) {  
      
        color c = cam.pixels[(i%80)*8 + (i/80)*640*8];  
      
        //...l'afficher le carré en fonction de la luminosité  
        motif[i].affiche(brightness(c));  
      }  
      image(cam, width-width/12, height/12, width/6, height/6);  
      
    }  
      
    class Carre {  
      
      int x, y;  
      int nbPixParLigne;  
      int taille;  
      float angle;  
      
      Carre (int num) {  
      
        nbPixParLigne = 80;  
        angle = PI/2;  
        taille = 10;  
      
        // calcule la position de chaque carré  
        x = num%nbPixParLigne * taille + taille/2;  
        y = num/nbPixParLigne * taille + taille/2;  
      }  
      
      void affiche(float lumiere) {  
      
        if (lumiere < 150) angle = PI/2;  
        else angle = PI;  
      
        pushMatrix();  
        translate(x, y);  
        rotate(angle);  
        image(carre, 0, 0, taille, taille);  
        popMatrix();  
      }  
    }

Jauneetnoir.gif