Code Processing LightPainting

// Variables globales
int mood = 1; // Mode d'affichage : 0 = Sombre, 1 = Clair
import processing.video.*; // Import de la bibliothèque vidéo
Capture video; // Objet pour capturer la vidéo de la webcam
int signal = 0; // Variable signal (non utilisée dans ce code)

void setup() {
  size(800, 600); // Définit la taille de la fenêtre à 800x600 pixels
  frameRate(50); // Définit le taux de rafraîchissement à 50 images par seconde
  video = new Capture(this, width, height); // Initialise la capture vidéo avec les dimensions de la fenêtre
  video.start(); // Démarre la capture vidéo
}


void draw() {
  video.read(); // Lit la frame actuelle de la vidéo
  
  // Attend quelques frames avant d'appliquer les effets de mélange
  if(frameCount > 2) {
    // Mode clair : mélange avec l'effet LIGHTEST (garde les pixels les plus clairs)
    if(mood == 1) blend(video, 0, 0, width, height, 0, 0, width, height, LIGHTEST);
    
    // Mode sombre : mélange avec l'effet DARKEST (garde les pixels les plus sombres)
    if(mood == -1) blend(video, 0, 0, width, height, 0, 0, width, height, DARKEST);
  } 
  else {
    // Pour les premières frames, affiche simplement l'image vidéo sans effet
    image(video, 0, 0);
  }
}

void keyPressed() {
  // Touche ESPACE : remet l'arrière-plan selon le mode
  if(key == ' ') {
    if(mood == 1) background(0); // Arrière-plan noir en mode clair
    if(mood == -1) background(255); // Arrière-plan blanc en mode sombre
  }
  
  // Touche 'q' : bascule entre les modes clair et sombre
  if(key == 'q') {
    mood = -mood; // Inverse le signe de mood (1 devient -1, -1 devient 1)
  }
  
  // Touche 's' : sauvegarde la frame actuelle
  if(key == 's') {
    // Crée un nom de fichier avec le numéro de frame et l'heure actuelle
    saveFrame("save-" + frameCount + " " + hour() + "" + minute() + "" + second() + ".jpg");
    println("saving frame"); // Affiche un message dans la console
  }
}