Animator_-_producer

À la suite d’Animator (animator.08.html), j’ai bricodé le programme de lecture des fichiers d’anim (.json) sous Processing. Le grand intérêt du logiciel est sa possibilité d’enregistrer les images générées.

Cette version du player permet donc de produire (d’où le nom) les images au format png. Par défaut la définition est fullHD mais il est possible de changer la chose en modifiant les paramètres de size().

Le programme a été écrit sur un Macbook pro sous MacOS qui bénéficie d'écran retina (double définition), le size() n’est que de 540*960 mais le pixelDensity(2) produit des images en fullHD.

Au lancement du programme, une boite de dialogue prospose de sélectionner le fichier d’anim. Une fois fait, les images sont générées et enregistrées dans un dossier qui porte le nom du fichier, dans le dossier du projet processing.

/*
  v3 :  - selection du fichier à produire
        - enregistre les images dans un dossier au nom du fichier
  v4 :  - quitte le programme quand production finie (gestion d'erreur d'exception)
        - nettoyage du code 
*/

JSONObject json;
int speed, nLargeur,nHauteur,largeur,hauteur;
JSONArray datas;
JSONArray imgEncours;
int indexBlocImgEncours;
int numImg = 0;
int[] aImgEncours;
Boolean flag = false;
String[] nomFichier;
String nomDossier;

void fileSelected(File selection) {
  if (selection == null) {
    println("La fenêtre a été fermée ou l'utilisateur a abandonné.");
    exit();
    println("FIN DU SCRIPT");
  } else {
    println("User selected " + selection.getAbsolutePath());

    nomFichier = split(selection.getAbsolutePath(), '/');
    nomDossier = split(nomFichier[nomFichier.length-1],'.')[0];
    // fichier à charger
    json = loadJSONObject(selection.getAbsolutePath());

    JSONArray dim = json.getJSONArray("dim");
    nLargeur = dim.getInt(0);
    nHauteur = dim.getInt(1);
    largeur = width/nLargeur;
    hauteur = height/nHauteur;
    datas = json.getJSONArray("datas");
    flag = true;
  }
}
void setup() {
  pixelDensity(2);
  //size(1080, 1920);
  size(540,960);
  selectInput("Choisissez un fichier d'anim:", "fileSelected");
}

void draw() {
  if (flag) {
    noStroke();
    background(255);
    imgEncours = new JSONArray();
    int numBlocEncours = 0;
    try {
      imgEncours = datas.getJSONArray(numImg);
      aImgEncours = imgEncours.getIntArray();
      int indexBlocEncours = 0;
      for (int item:aImgEncours) {
        int y = int((item-1)/nLargeur);
        int x = (item-1)%nLargeur;
        fill(0);
        rect(x*largeur, y*hauteur, largeur, hauteur);
      }
      save(nomDossier+"/img-"+nf(numImg, 3)+".png");
      numImg++;
      println("sauvegarde de l'image N°"+nf(numImg, 3));
    } 
    catch (java.lang.RuntimeException e) {
      exit();
      println("FINI");
    }
  }
}