Texte et dessin : Rorscha et Balzac se rencontrent

Un petit script en qui dessine du texte sur une image de Rorscha. Une version minimale àaméliorer.

Une fois le script chargé, il suffit de passer sur la surface de l’animation avec la souris pour faire apparaitre les mots.

// Rorscha et Balzac reunifie
// http://fr.wikisource.org/wiki/Le_P%C3%A8re_Goriot/I
// variables et array necessaires
PImage a;
String lines[];
String mot[];
int countword=0;
PFont mapolice;

void setup() {
  size(736,482);
  background(255);
  smooth();

  // charger la police et parametrer
  mapolice = createFont("Titillium_title03.ttf", 10);
  textAlign(CENTER);

  // charger l'image en mémoire sans l'afficher
  a = loadImage("ror.png");
  a.loadPixels();

// charger le texte depuis le fichier externe
  lines= loadStrings("texte.txt");
  mot = split(lines[0]," ");
}

void draw() {
  color pix = a.pixels[mouseY*width+mouseX];
  if(pix != -1 && mouseX !=pmouseX && mouseY != pmouseY){
    fill(pix);
    text(mot[countword], mouseX, mouseY);
    countword++;
    if(countword >=mot.length){ 
      countword=0; 
    }
  }
}

PS : Au moment ou je poste ce script, la gestion des polices et la génération de PDF est assez instable et compliquée en Processing 1.1. D’ici quelque temps le problème devrait être réglé, d’ici làla police par défaut (une sans-serif quelconque) est affichée dans le script avec Processing 1.1.

Variante plus complète

Ici, un système qui ne fait pas appel àla souris mais aux touches pour créer différentes propositions.

// Rorscha et Balzac reunifie
// http://fr.wikisource.org/wiki/Le_P%C3%A8re_Goriot/I
// variables et array necessaires
PImage a;
int precision=10; // plus ou moins de mots dans le dessin

String lines[];
String mot[];
int countword=0;
PFont mapolice;

void setup() {
  // charger l'image, elle decidera de la taille de l'animation
  a = loadImage("ror.png");
  size(a.width,a.height);

  smooth();

  // charger la police et parametrer
  mapolice = createFont("Titillium_title03.ttf", 10);
  textAlign(CENTER);

  // charger l'image en mémoire sans l'afficher
  a.loadPixels();

  // charger le texte depuis le fichier externe
  lines= loadStrings("texte.txt");
  mot = split(lines[0]," ");
}

void draw() {
  // rien ici, on attend une action de l'utilisateur
}

void keyPressed() {
  if (key == CODED) {
    if (keyCode == RIGHT || keyCode == LEFT) {
      nouvelle_image();
    }  
  } else {
    saveFrame();
  }
}

void nouvelle_image(){
  background(255);
  for(int ax=0;ax<width;ax+=precision) {
    for(int by=0;by<height;by+=precision) {
      // capturer la couleur sur un point de l'image
      color pix = a.pixels[by*width+ax];
      fill(pix);
      // la longueur du mot détermine sa taille
      String lemot=mot[countword];
      textSize(lemot.length());
      
      text(lemot, ax, by);
      
      // mot suivant
      countword++;
      if(countword >=mot.length) { 
        countword=0;
      }
    }
  }
}