Charger des images depuis un dossier sélectionné par l’utilisateur

Ce script utilise une classe maison fournissant un liste de documents sur base d’un nom de dossier. Si on lui ajoute la fonction selectFolder(), on obtient un code permettant àl’utilisateur de choisir le dossier source.

Précédent | 7/7

Voici un code complet et fonctionnel, affichant les images les unes après les autres d’après le dossier fourni par l’utilisateur. On peut facilement modifier le code pour charger d’autres types de documents (texte, svg, etc.).

list_directory liste;
boolean selected=false;
int compteur=0;

void setup() {
  size(600, 400);
  fill(0);
}

void draw() {
  background(255);
  if (selected==true) {
    PImage limage=loadImage(liste.fichiers[compteur]);
    image(limage, 0, 0);
    compteur++;
    if (compteur >= liste.fichiers.length) {
      compteur=0;
    }
    delay(400);
  } else {
    text("appuyez sur une touche pour sélectionner un dossier d'images",20,20,width-40,100);
  }
}

void keyPressed() {
  selectFolder("Selectionnez un dossier d'image :", "folderSelected");
}

void folderSelected(File selection) {
  if (selection == null) {
    println("Pas de dossier sélectionné");
  } 
  else {
    println("Dossier choisi : " + selection.getAbsolutePath());
    liste = new list_directory(selection.getAbsolutePath(), "jpg|png|gif");
    selected=true;
  }
}

// list_directory(nom du dossier, extension a filtrer separés par des |);
// renvoie un array de string
class list_directory {
 String extension;
 String[] fichiers;
 String dossier;
 int nb_items;
 
 //constructeur
 list_directory(String dossier, String extension){
   this.dossier=dossier;
   this.extension=extension;
   fichiers = listFileNames(dossier, extension);
   nb_items=fichiers.length;
   println(fichiers.length + " elements");
 }
 
 // listage le contenu d'un dossier en ne prenant que les extensions fournies -------------------------
 String[] listFileNames(String dir, String extension) {
   File file = new File(dir);
   if (file.isDirectory()) {
     String names[] = file.list();

     // procedure d'elimination des fichiers non concernés
     String[] names_ok= {};
     for(int i=0; i<names.length;i++) {
       String[] m1 = match(names[i], extension);
       if (m1 != null) {
         names_ok=append(names_ok,dossier+"/"+names[i]);
       }
     }
     return names_ok;
   }
   else {
     // If it's not a directory
     println("le nom fourni n'est pas celui d'un dossier");
     return null;
   }
 }
}