Index Berger's Works| HOME DICCAN


Roxame. Présentation, mode d'emploi

Texte donné à titre exclusivement indicatif et sans garantie de bon fonctionnement.

1. Présatation générale, objectifs
2. Utilisation de Roxame en ligne de commande
3. Utilisation par macros
4. Formes de base
5. Filtres
6. Opérations géométriques
7. Classes et régions
8. Chargement et mise en réserve d'une image
9. Textes
10. Evaluation et critique
11. Hasard, autonomie, génératif
12. Relations externes avec Arduino
13. Générateurs
14. Macros, scripts
15. Travaux pour diccan
16. Le code Processing
17. Bibliographie

1.Présentation générale, objectifs

 Introduction historique

Installation

Il faut installer : Processing (en avril 2013, nous recommandons la version standard, qui passe mieux sur diffférents systèmes d’exploitation) dans un répertoire c:\Roxame et Open CV dans un répertoire c:\Roxame\OpenCV, éventuellement Arduino. Le tout dans un répertoire c:\Roxame
Tous ces logiciels sont libres et fonctionnent sous tous les systèmes d’exploitation courants.

Ensuite il faut recopier :

- le dictionnaire, dico.txt) dans le même répertoire que Roxame
- les polices de caractères si elles n’y sont pas (voir celles qui existent dans le dictionnaire, il faut moins Arial)
- des sous-répertoires c:\data\... pour les documents et un sous-répertoire c\Roxame\Texts
- ouvrir des sous-répertoires c:\Roxame\data\Dustbin  et c:\Roxame\data\Works pour les œuvres,  …data\Reports pour les analyses et critiques.

Pour faire fonctionner, il n’y a plus alors qu’à lancer l’application avec le petit triangle en haut à droite dans l’écran Processing.

2. Utiliser Roxame au mot à mot

Le logiciel Roxame, qui est  essentiellement un peintre autonome, et même "une" peintre. Très autonome par tempérament, elle ne vous permet pas de lui prendre la main et de faire les choses à sa place, par exemple avec une souris. Il faut lui parler, ou plus exactement lui faire part de vos désirs en tapant des "lignes de commande". A son grand regret, pour l'instant, elle ne parle pratiquement que l'anglais. Et elle ne comprend que les mots qui font partie de son dictionnaire. Si vous tapez un autre mot, elle ne se fâchera pas, mais vous dira "word not found".

Noter sur cet écran :
- au centre, l’image sur laquelle on travaille
- à gauche depuis le haut, les actions qui ont été exécutées
- à gauche, à la hauteur du bas de l’image, la ligne de commande
- à droite en haut, un certain nombre de variables courantes, notamment le numéro de l’œuvre
- à droite plus bas, la pile des actions à exécuter
- sous l’image, à gauche, le contenu de l’image auxiliaire (imgx)
- une visualisation de la segmentation (les couleurs n’ont pas de signification)
- dans certains cas, affichage d’un histogramme
- tout en bas, des commentaires issus du dictionnaire ou, en version « jeux », des indications pour le joueur.

Vous pouvez toujours aller voir ce dictionnaire en tapant dico  (On revient dans le programme avec TAB).  Vous pouvez aussi avoir quelques explications sur n'importe quel mot existant, en tapant ce mot suivi de .c . Enfin, le dictionnaire étant en format .txt, vous pouvez aller le lire directement. Et vous pouvez en faire une présentation plus plaisante en HTML avec dicoHTML  . Le résultat est dans le sous-répertoire Reports.

Pour tester les résultats, nous avons mis quelques images à votre disposition :

(un peu plus compliqué si vous voulez mettre les vôtres)

Vous pouvez taper plusieurs mots sur une seule ligne. Mais l'ordre n'est pas indifférent. Il faut mettre les paramètres avant le mot d'action à la fin

Enfin, si vous êtes programmeur, ce voyage vous permet aussi d'aller voir au coeur du code (Processing et Java) comment on peut programmer tout cela (mais Roxame n'a aucune prétention à se prendre comme un modèle de bonne et belle programmation).

Une petite promenade pour faire connaissance 

Soyez sympa avec Roxame, laissez-là s’amuser un peu, en tapant simplement  les deux mots  any line. Refaites-le plusieurs fois, car Roxame est fantaisiste et parfois elle fera un caprice, par exemple en imprimant blanc sur blanc, et vous aurez l’impression qu’elle n’a rien fait.

Maintenant, au travail. Tapez one pour revenir aux choses sérieuses. 

Commençons par dessiner une forme simple : tapez square. Vous voyez s’afficher, à peu près au centre, un carré sépia. Vous pouvez essayer quelques autres formes, par exemple  circle ou line. Notez que h et v tirent des horizontales et des verticales (sans vous demander votre avis sur la position de cette ligne).

Changez de couleur : tapez par exemple  red (blue, yellow, green, black, et beaucoup d’autres comme very_dark_gray…), puis un nom de forme : blue ellipse (note that we do not type blue_ellipse : here, blue and ellipse are two different terms in the dictionary), for example.

Créer des formes pleines au lieu de simples contours, tapez paint (attention, Roxame est un peu plus lente quand elle doit colorier toute une surface), puis une forme : par exemple : paint yellow triangle.

Maintenant, chargez une image : tapez Manh. Vous pouvez passer à la suivante, dans le même répertoire, en tapant next. Ou, si votre webcam est branchée, faites simplement cam (à remettre en fonction)

Appliquez lui un filtre : blue_toning (attention à l'orthographe, ici il faut bien le souligné entre blue et toning, et le tout en minuscules) , par exemple  ou encore contours.

Enfin, pour sauvegarder l’uvre immortelle que vous venez de créer, faites nww et allez voir dans le sous-répertoire Sas, vous l’y trouverez, au format .jpg et pourrez l’envoyer par mail à vous vos amis ! Dans le même temps, Roxame vous a préparé une belle page toute blanche !

Maintenant vous êtes prêt pour une exploration plus détaillée, et vous pourrez plonger de plus en plus profondément dans Roxame et développer vos capacités de création avec elle : dabord les emplois mot par mot, plus les macro-instructions, y compris la génération automatique d’une série d’œuvres, puis le développement du dictionnaire, la préparation de présentations et, top du top, modifier ou mieux, continuer à perfectionner le code même de Roxame. Dans ce dernier cas, j’espère bien que vous ferez profiter de vos travaux la communauté des développeurs, et même que vous adhérerez à l’association Les Algoristes.

Modes de présentation à l’écran

Outre le mode normal, Roxame peut fonctionner en mode HD, avec l’image occupant tout l’écran. Il suffit de taper s_HD. Mais alors on n’a plus moyen de savoir ce que l’on tape (ceci pourrait être arrangé à l’avenir avec des fenêtres pop-up.

Nota : pour avoir vraiment la totalité de l’écran, sans les barres de Windows (non vérifié pour les autres systèmes d’exploitation), il faut appuyer sur Control + Maj au moment où on lance Roxame avec le petit triangle.

On revient au mode ordinaire avec la touche TAB.

3. Utilisation par macros

 

Les macros figurent dans le dictionnaire avec la catégorie macro_ . Elles y persistent

Une ligne de commande comprenant plusieurs termes est traitée comme une macro.

4. Formes de base

En mode ligne de commande, au lancement de Roxame, rien de plus simple pour obtenir une forme. Tapez simplement son nom. Par exemple square.

En tapant forms.c vous aurez quelques exemples des principaux types de formes que Roxame sait générer. Il suffit de taper leur nom. Vous noterez que toutes ces formes sont linéaire, non pleines, à peu-près au centre, et couleur terre-de-sienne...

Vous pouvez changer cela en utilisant différentes paramètres. Pour chacun d'eux, vous avez la liste des valeurs de base en tapant le nom suivi  de .c . Quelques observations :

- les valeurs de paramètres doivent toujours être tapées avant le nom de la forme (ce peut être sur la même ligne de commande ou sur des lignes consécutive) 

- position (position) : place le centre de la forme. SPL et SPR sont les "points forts" à droite et à gauche,  HLC, HRC, LLC et LRC sont les quatre coins, position.rd tire une position au hasard. Valeur par défaut : center ; on peut aussi définir une position relativement à la forme qui vient d'être tracée, avec at_right, at_left, above, under , ou encore avec tpg , qui fonctionne "typographiquement" : quand on arrive à la fin de la ligne, on passe au début de la suivante, jusqu'à couvrir toute la page. 

- orientation (orient)   : est importante surtout pour tracer une ligne, qui peut monter (ascend) ou descendre (descend). Valeur par défaut : ascend.

- creux/plein (modeg), fournit une forme linéaire (draw) ou pleine (paint). Valeur par défaut : draw.

- taille  (size) donne la dimension globale de la forme (diagonale du rectangle où elle s'inscrit) ; noter que bord_a_bord étend la forme d'un bout à l'autre de l'image, soit horizontalement, soit verticalement, en fonction de la proportion. Valeur par défaut : big.

- proportion (prop) donne les proportions de la forme, depuis horizontal jusqu'à vertical . Valeur par défaut :  isocele indique que hauteur et largeur sont identiques (sauf exception). isocele rectangle est équivalent à square, et isocele ellipse à circle

- épaisseur (e) ; very_thin donne une épaisseur de 1 pixel ;  very-thick de 10pixels; Valeur par défaut : thin.

- ubris (ubris) : cold, sober, alive, drunk mad //////////////////ne marche pas vraiment

- style (style) tente d'aller plus loin que le mode courant , rigidsensitive tente de recréer les hésitations de la main du dessinateur (l'effet n'est sensible que si Roxame n'est pas d'humeur cold, mais un peu échauffée, ce que vous obtenez avec alive ou drunk, par exemple). soft fait varier l'épaisseur en donnant une sorte de coupure. Dans ce domaine, l'imagination pourrait aller beaucoup plus loin.

- couleur (color) ; essayez pastel_blue , par exemple, pour vous changer.

- mode de mélange (blend) vous propose trois valeurs. imperativepose la forme en écrasant ce qu'il y avait précédement ; additive et subtractive (attention à l'orthographe de ce mot, l'anglais ne mettant pas de s après sub)  font les deux types de mélange.

- clipping  (clip) n'a vraiment d'effet utile que sur une image segmentée ; valeur par défaut clip_touch, qui reporte seulement la forme engendrée ;

Vous pouvez toujours revenir aux valeurs par défaut avec one. Vous pouvez aussi tirer hasard l'ensemble des paramètres avec any, ou la valeur d'un paramètre déterminé en faisant suivre son nom de .rd , par exemple forms.rd . Attention : dans certains cas, il ne se passera rien, par exemple si le hasard ajoute une forme blanche en mélange soustractif.

Mais Roxame sait dessiner d'autres formes que les quelques exemples donnés par forms.c . Pour les découvrir, il faut procéder en deux étapes. Avec forms.c vous obtenez une liste des différentes types de formes disponibles. Attention à l'orthographe, pour éviter des ambiguïtés, les noms de types comportent souvent un caractères souligné à la fin. Pour chacun de ces types, vous obtenez les formes en tapant ce type suivi de .c  par exemple, line_.c. Attention à l'orthographe, pour éviter des ambiguïtés, les noms de types comportent souvent un caractères souligné à la fin. 

Nota : une bonne partie de ces forme ont un intérêt mineur pour une utilisation en ligne. elles sont en revanche assez pratique pour varier les constructions automatiques de Roxame.

Quelques commentaires sur ces types :

line_  :  line est la ligne simple, lines une série de quatre lignes, h et v tracent des horizontales ou des verticales bord à bord, hhhh et vvvv répètent l'opération quatre fois

triangle_ :  triangle trace un triangle à peu près quelconque ; les commande triangle_up, triangle_down, triangle_left, triangle_down tracent des triangles toujours appuyés sur une ligne de base (définie par les paramètres ci-dessus) et complètent par un triangle dont le sommet est en bord d'image,  respectivement en haut, en bas, à gauche et à droite ;

arrow_ : la série arrow_left, roof, arrow_right, stake donne aussi une série de triangles, ceux-ci isocèles et avec une base verticale ou horizontale

rectangle_ : juste rectangle, comme plus haut, et square

quadrilateral_ (quad_quad trace un quadrilatère à peu près quelconque (mais convexe) ; la série  quad_up, quad_down, quad_left, quad_right trace des quadrilatères comme les séries précédentes : appuyées sur la ligne de base, et se prolongeant jusqu'à un des bords.  myQuad est définit par les coordonnées de ses quatre sommets ; vous pouvez les modifier vous-mêmes en changeant la définition de myQuad dans le dictionnaire (troisième colonne); 

polygon_ : pentagon, hexagon, octagon, octagon_regular

ellipse_ : ellipse, circle . circle est équivalent à isocele ellipse

pixel_ :  nous n'avons pas implémenté le pixel unique ; pixels crée un nuage de pixels sur toute l'image, à la densité de 1% ; pixelsn fait de même,  à la densité indiquée par le nombre précédent ; par exemple  100  pixelsn couvre toute l'image de la couleur en cours. pixel_cloud fait un petit nuage de pixels (à améliorer).

Les deux types suivants sortent du concept normal de formes, mais peuvent être utiles ou amusant.

write_ :  letters fait un semis de lettres, phrases un semis de phrases

CF_ : CF_portrait et CF_landscape tracent des cadres pour une bande dessinée (pour s'en servir aisément, il faut ensuite segmenter, voir le chapitre ad hoc). 

Nous vous proposons une promenade au royaume des couleurs, en partant du plus simple.

Vous pouvez toujours aller voir ce dictionnaire en tapant dico  (On revient dans le programme avec TAB).  Vous pouvez aussi avoir quelques explications sur n'importe quel mot existant, en tapant ce mot suivi de .c

Pour tester les résultats, nous avons mis quelques images à votre disposition :

(un peu plus compliqué si vous voulez mettre les vôtres)

Couleurs et palettes

Une couleur, en première analyse, c'est la donnée de trois nombres entiers compris entre 0 et 255, correspondant aux trois composantes des écrans : rouge, vert bleu (RGB, en abrégé) .

Pour Roxame, un certain nombre de couleurs portent des noms. Vous en avez la liste en tapant color.c

Vous pouvez voir les valeurs correspondantes en tapant sur un nom de couleur suivi de .c. Par exemple, black.c vous indiquera que le noir correspond aux trois valeurs 0,0,0.

Si vous voulez voir l'effet d'une couleur déterminée, vous frappez le nom de couleur puis filler. Par exemple   red filler (sans souligné entre les deux mots).

Vous pouvez mélanger deux couleurs,  mais la syntaxe n'est pas géniale.

- Chargez une couleur   :mauve filler
- Mettez la de côté dans une zone de services en tapant   tabix

- Chargez une autre couleur : ochre  filler.

- Mélangez : tabim3.

En l'occurrence, vous avez fait le mélange le plus traditionnel en peinture, un mélange soustractif, chaque pigment filtrant sélectivement une partie du spectre. Il y a un autre mode classique de mélange, dit additif, qui correspond par exemple à l'effet obtenu en éclairant un écran avec deux projecteurs. Pour tester, remplaces la dernière ligne précédente par  tabim4.

(Si vous êtes plus hardi) vous pouvez créer vos propres couleurs.

- Ouvrez le dictionnaire    dico
- Libérez une ligne du dictionnaire   F4

- tapez  myColor (ou un nom de votre choix) dans la première colonne
-  tapez color dans la deuxième colonne

-  tapez vos trois valeurs dans la troisième colonne, par exemple  128 128 255

- Revenez à la page normale avec TAB

- Tapez myColor filler, et admirez votre travail.

(Votre exemplaire du logiciel Roxame conservera ces valeurs dans le fichier dico.txt. Ce dictionnaire peut être édité avec un logiciel de type bloc-notes, qui n'introduit aucun code de mise en pages. )

Palette : un ensemble de points

Pour des raisons aussi bien pratiques qu'artistiques, on recourt souvent à des palettes. Les plus simples sont des ensembles de couleurs.

Pour Roxame, les palettes aussi ont des noms. Vous pouvez voir la liste des palettes disponibles avec palette.c

Une des plus classiques, conçue dans les années 1970 pour les écrans et logiciels rudimentaires de l'époque, est l'ensemble des 16 couleurs VGA. C'est très peu par rapport aux quatre millions de couleurs permises par le modèle RGB, mais cela permettait déjà de bien s'amuser.

Vous pouvez avoir la liste des couleurs en tapant VGA.c.

Pour en apprécier l'effet,  mettez en place la palette, chargez une image (liste en images.c, par exemple color_wheel ) , et ramenez là aux couleurs de la palette :

- VGA.pl (Vous pouvez choisir une quelconque des palettes de la liste).

- Paris  (photo mise à disposition pour vos tests, nous vous indiquerons plus loin comment en mettre d'autres à la disposition de Roxame)

- palign (Cette opération, que nous appelons ici "alignement", se fait par un calcul de distance : on mesure la distance de la couleur d'origine à chaque couleur de la palette, et on prend la plus proche. Vous constaterez parfois des anomalies dues aux imperfections des algorithmes de Roxame).    

On peut aussi apprécier l'effet d'une palette sur une couleur déterminée en tapant le nom de la couleur suivi de pfiller (toute l'image est recouverte de la couleur rabattue sur la palette).

Roxame a sa propre palette de prédilection, comportant aussi 16 couleurs, choisies d'après la boite d'aquarelles de son papa, Pierre Berger.  Ici encore, liste des couleurs en roxame_palette.c,

et examen des effets avec  roxame_palette.pl Manh  palign.

Les autres palettes (lites en tapant palette.c)

- tifine, inspirée par une peintre normande
- quadri , juste quatre couleurs (inspiré par les quatre couleurs de la quadrichromie typographique, mais l'effet est différent, car ici il n'y a pas de mélange
- juste le noir et le blanc. BW  (Ce n'est pas une palette à proprement parler, ne tapez pas .bl). Le résultat est en général médiocre sauf à préparer l'image au préalable.   

On peut considérer aussi  poster comme une palette, ou plus exactement (dans Roxame) comme un ensemble de palettes obtenu en divisant également chacune des trois couleurs RGB. Vous pouvez l'appliquer directement à une image en tapant simplement poster précédé d'un nombre, qui indique combien de valeurs on prend pour chaque composant R G B. Le plus brutal est obtenu avec 2 poster. A partir de 30, le résultat devien peu visible.

Et vous pouvez constituer votre propre palette, en faisant comme pour une couleur

- ouvrez le dictionnaire en tapant dico, libérez une ligne avec F4
- mettez myPalette en première colonne (ou un nom de voire choix)

- list en deuxième colonne

- la liste des couleurs que vous choisissez en troisième colonne.

- si vous êtes consciencieux, ajoutez une ligne de commentaire, avec  votre nom de palette suivi de .c en première colonne, comment en deuxième colonne et vos explications en troisième colonne
- revenez dans le programme avec TAB et tapez myPalette.pl.

Note théorique : par construction, tout modèle digital a toujours un nombre fini de couleurs. Mais, passé certaines valeurs, et en particulier pour le modèle RGB 255,  on est au-dela des capacités de différenciation de l'oeil, et l'on retrouve une impression d'espace continu.

Des points aux lignes, surfaces et volumes

 Ces palettes sont évidemment très "réductrices". Le mot même de palette est un peu trompeur. La palette d'un peintre ne comprend qu'un petit nombre de couleurs, mais il peut les mélanger et les diluer, ce qui n'est pas le cas ici, où une couleur n'est qu'un point dans l'espace à trois dimensions des couleurs.  

 Pour retrouver cette impression de "continuité",  une des méthodes de base est de réduire l'espace des couleurs non pas à un certain nombre de points, mais à un certain nombre  de lignes, de surfaces voire de sous ensembles volumiques.

Mais il est assez peu intéressant de faire ces projections dans l'espace "technologique" qu'est le cube RGB. Il vaut mieux opérer  mais dans un espace mieux lié à notre psychologie de la vision: l'espace HSV : hue (pour ton), saturation et valeur (approximativement, luminosité). Nota : il existe d'autre espaces, par exemple HSL. Chacun a ses avantages et inconvénients.

Il s'agit encore d'un espace à trois dimensions, donc on peut passer de manière déterministe et sans perte ("biunivoque") de l'un à l'autre, au moyen de fonctions appropriées. Si vous avez sous la main un logiciel comme Gimp ou Photoshop, vous pouvez manipuler ces deux espaces avec le "color chooser".

Alors que l'espace RGB est un cube, l'espace HSV est un cône (ou une pyramide à base hexagonale, mais en pratique on l'utilise comme un cône). L'axe du cône est celui des valeurs (luminosités), de 0 à 255.  Autour de cet axe,  nous avons deux coordonnées ("polaires"), la distance au centre pour la saturation (de 0 à 1000) et l'angle (en degrés) pour le ton (hue). Ce dernier point correspond à une caractéristique de la vision humaine, pour qui les couleurs forment une "roue". Cela oblige souvent le programmeur à prendre des précautions.

D'une part les opérations de comparaison, de différence, d'augmentation doivent toujours se faire "modulo 360".

D'autre part, quand on transforme une couleur RGB en HSV, la saturation zéro est obtenue quand les trois valeurs R, G, B sont égales entre elles. Dans ce cas, il faut considérer que le ton n'est pas défini. Roxame le met à zéro, mais c'est dangereux, car si l'on fait ensuite un changement de saturation, on obtiendra du rouge, effet qui en général n'était pas recherché (cas des dégradés, par exemple).

De plus, le modèle ne correspond pas complètement à nos idées naturelles, puisque sur la base du cône, (valeurs 255), on retrouve les couleurs "vives" (saturées, saturation 1000) sur le tour de la base, et le blanc au centre, que notre oeil perçoit comme plus lumineux,. Tapez color_wheel pour en avoir une illustration avec deux coupes de ce cône, l'une au milieu de l'axe des valeurs, l'autre à la base (255).

Projection sur une ligne

L'exemple le plus simple est le passage au grisé (tapez graying à partir d'un document chargé)  qui projette toutes les couleurs sur l'axe des luminosités, depuis 0 pour le noir jusqu'à 255 pour le blanc. Noter que sur cet axe, à saturation zéro, le ton n'a pas de sens.

On peut imaginer un grand nombre de telles lignes. Il suffit pour cela

- soit de fixer la valeur de deux des trois paramètres et de n'en laisser jouer qu'un
. ci dessus, on a fixé sat à 0, hue n'a pas de sens, on ne joue que sur val
. on peut fixer sat et hue, et ne jouer que sur val ; on a une ligne qui va du sommet à un point de la base (pas testé) ; en général, pas très bon résultat sur parce qu'on n'a pas de blanc  ;
. on peut fixer val et hue, ne jouer que sur sat (pas testé) ; on a une ligne qui part de l'axe central, lui est perpendiculaire et va à une extrémité
. on peut fixer val et sat, et jouer sur hue .

- soit de se donner deux équations reliant les trois variables ; mais cela permet d'avoir des résultats plus riches que le simple rabattement sur une valeur ; comparez par exemple graying avec smart_graying , qui vise à retrouver la chaleur des tirages argentiques sur papier légèrement crème (quelquefois, l'effet est excessif). Il en va de même pour les camaïeux, ou toning (liste en toning.c), dont quelques uns sont assez satisfaisants, par exemple blue_toning ou sepia_toning (ils rappellent les "virages" pratiqués dans les années 30 ) d'autres plus  bizarres, comme  green_mauve_toning, ou mériteraient d'être améliorés, comme sienna_toningtoning_.rd (attention au souligné) applique un de ces filtres choisi au hasard.  

helix_l est une ligne hélicoïdale avec le ton proportionnel à la luminosité, partant d'une valeur aléatoire pour val =0 et faisant un tour complet jusqu'à val 255. Résultats peu intéressants.

Plusieurs lignes

Pour l'expérience, nous avons créé la fonction ralign, qui réduit à un ensemble de lignes qui conservent la valeur du pixel d'origine, mais s'alignent sur le ton et la saturation de la couleur donnée dans la palette.  On peut tester sur une seule couleur avec rfiller

Le résultat n'est pas satisfaisant pour les couleurs claires, car alors la saturation est trop forte en général. Nous avons fait un essai en réduisant les saturations dans les valeurs claires, avec salign et sfiller

Nous avons tenté un essai plus ambitieux en construisant une série de lignes définies par quatre points : le noir, le blanc et deux couleurs intermédiaires, une plus claire et une plus foncée, choisies dans la palette complète de Roxame. L'objectif était de contourner certaines zones déplaisantes de l'espace des couleurs (jaune vif foncé).

Pour faire fonctionner :

- chercher la liste des palettes de tubes avec tubeset.c

- charger une palette de tubes avec le nom de cette palette suivi de .tb

- voir les valeurs d'un des tubes de cette palette en tapant le nom du tube suivi de .sh
- charger une image et appliquer la palette de tubes en tapant talign

A ce jour, les résultats ne sont pas convaincants, mais rien n'empêcherait de poursuivre les recherches. Il est assez facile de créer de nouveaux tubes et de nouvelles palettes en s'inspirant des palettes existantes dans le dictionnaire. Il n'est pas nécessaire d'intervenir sur le code proprement dit.

Surfaces

On conserve deux des valeurs d'origine. La réduction d'espace est encore moins forte que sur une ou plusieurs lignes. Le résultat est donc moins "stylisé".

Quelques exemples :  

plate_f , précédé d'un nombre, projette sur le plan de la valeur correspondante (tout est noir si le nombre est zéro, on est au maximum des valeurs si le nombre est 255).
plate_hf  précédé d'un nombre, projette sur le demi-plan correspondant au ton choisi (nombre entre 0 et 360). On a le même type de résultat en frappant d'abord le nom d'une couleur (par exemple green)  suivi de coulref_f.
hplane (toujours précédé d'un nombre entre 0 et 360) projette non pas sur le demi-plan correspondant au ton, mais sur le plan complet du ton et de son complémentaire. les résultats sont parfois assez jolis.  
qalign conserve la valeur, mais aligne en ton et saturation sur la couleur la plus proche dans la palette en cours. On peut tester sur une couleur déterminée avec qfiller
helix.f on projette sur une surface hélicoïdale (comme helix.l ci-dessus, mais en ne fixant pas la saturation) le hue étant proportion de la valeur. Le résultat n'a pas un grand intérêt, mais est nettement plus plaisant que la projection sur une ligne. 

Plusieurs surfaces

Projection sur des surfaces

 melon_f  précédé d'un nombre entre 0 et 360, par exemple 60 . découpe le volume par une série de tranches

Un volume

shrink_f  précédé d'un nombre réduit l'espace dans toutes ses dimensions. Sans intérêt en général.

Comme il est souvent déconseillé, aux aquarellistes par exemple, d'éviter les noirs absolus, nous proposons blacksupp qui remonte proportionnellement toutes les luminosités pour ne pas avoir de valeur inférieure au nombre indiqué juste avant.

Au delà  

Roxame comporte de nombreuses fonctions permettant d'agir sur les couleurs, notamment sur les luminosités (liste en tapant val_filter.c)  ou les saturations ( sat_filter.c) .

Au delà, l'action sur les couleurs dépasse les transformations point par point dans l'espace des couleurs, et prend en compte par exemple la position dans l'image, pour obtenir des dégradés.

5. Filtres

filter_.c (attention au souligné) vous donne une liste de types de filtres. Les trois premiers types sont "simples", on pourrait dire "du premier ordre" : ils traitent chaque pixel indépendamment de ses voisins et de l'ensemble de l'image. Les autres tiennent compte de l'environnemnet à des degrés divers.

Filtres simples

hue_filter.c liste les filtres agissant essentiellement sur le ton

negative est classique (il inverse la valeur et passe le ton à la complémentaire ; d'autres solutiosn seraient possibles)

hue_rotation fait une rotation dans l'espace des tons (voir le chapitre consacré aux couleus), du nombre de degrés indiqués, par exemple  90 hue_rotation. Vous pouvez apprécier l'effet sur une image normale, mais on voit directemnet l'effet angulaire en chargeant color_wheel.

pour BW,  graying  et smart_graying voir le chapitre consacré aux couleurs

sat_filter.c  : la saturation est réduite légèrement avec sat-  plus fortement avec sat-- ; on peut doser l'effet en tapant un nombre suivi de sat-num (effet maximum avec 0 sat-num, qui est équivalent à graying)

à refaire : les sat+, pour ne pas impacter les blancs

La saturation est augmentée légèrement avec sat+, plus fortement avec sat++ ; on peut doser l'effet comme ci-dessus avec sat+num (effet maximum avec 1000 sat+num)  

neg_sat est laissé à titre de curiosité ; la saturation est inversée ; effet en général sans intérêt.

val filter.c  assombrissement ou éclaircissement avec  darken darken+ ligtten lighten+

contrast  augmente le contraste

Filtres plus complexes

fuzz crée un léger flou ; on peut répéter l'opération, par exemple comme une forme simpliste d'antialiasing. L'opération fait, sur chaque pixel, la moyenne avec les pixels voisins.  L'opération peut être répétée pour obtenir des résultats plus forts.

ranfuzz n'est pas exactement un algorithme de flou. il remplace chaque pixel par un pixel tiré au hasard dans un environnement carré plus ou moins grand. Il donne des résultats intéressants ; on peut le paramétrer en précédant le mot par un nombre (qui est par défaut, et au minimum, de 10 ; ce nombre donne le côté du carré dans lequel s'opère la sélection).  ranfuzzh et ranfuzzv n'appliquement l'opération que dans le sens, respectivement, horizontal et vertical.

median  donne aussi l'impression d'un certain flou, mais est plus subtil ; il prend pour chaque pixel la valeur médiane du rectangle entourant le pixel ; sur des images simles (draw square, par exemple), les résultats peuvent être déroutants et sans intérêt.

Les filtres précédents tendent plutôt à lisser l'image, à fondre les pixels. Ceux qui suivent, au contraire, accentuent les differences.

sharpen rend l'image plus "nette", plus "crisp" ; on peut l'utiliser à répétition : les résultats sont assez vite un peu bizarres, mais intéressants.

gradient remplace l'image par ses variations ; le résultat en lui-même est rarement plaisant, mais donne des bases utiles à d'autres traitements ; on peut améliorer par exemple en faisant suivre par sharpen darken

contours comme son nom l'indique,  réduit l'image à des contours ; le résultat sur une image naturelle n'est pas toujours plaisant ; on a un exemple parfait avec (sur un fond uni) paint square contours . On peut parfois améliorer le résultat avec les opérations morphogéométriques ci-dessous, notamment  x . Ou en faisant précéder l'opération par une simplification, par exemple median (ci-dessous) ou par une segmentation suivie de segapla (qui colore chaque région dans la couleur moyenne de cette région dans l'image d'origine. Atention, cette opération est longue. Si l'image n'a pas encore été segmentée, la commande segapla commence par une segmentation, selon l'algorithme segment2). n

Voir aussi le chapitre suivant, certaines opérations géométriques pouvant être considérées comme des filtres.

6. Opérations géométriques

Morphogéométrie

Roxamedispose d'une panoplie élémentaire de fonctions "morphogéométriques", c'est-à-dire appliquant un motif déterminé à chaque pixel. Les résultats peuvent être assez suprenants, mais utiles.

Les fonctions de base sont conçues pour travailler sur fond blanc. On n'obtiendra en général rien d'intéressant avec une photographie. Commencer par se ramener à des contours ou au moins à une image noir et blanc avec BW. On a des résultats intéressants aussi en passant par quadri.pl

X  et  Z remplacent le pixel par le losange (respectivement le rectangle) qui le contiennent. On a donc un grossissement des zones non blanches. x et z remplacent par le même losange ou rectangle, mais creux. Ce qui donne en pratique des effets de contours, ou de contours multiples.

XXX et ZZZ répètent trois fois l'opération.

Les mêmes fonctions avec un 2 ajouté in fine (par exemple x2, X2...) donnent les mêmes résultats, mais avec expansion des blancs au dépit des couleurs.

Symétries

Des symétries (liste en sym_.c) sont disponibles en trois séries, chacune avec une variante verticale, horizontale et diagonale :

sym_h , sym_v  et sym_d opèrent autour du milieu de l'image.
symG_h,  symG_v, et symG_d  opèrent autour du nombre d'or.
symR_h, , symR_v  et symR_d opèrent autour de lignes choisies au hasard.

Ces symétries ne sont pas un simple "flip", mais mélangent l'image et l'originale et sa symétrique, en mode additif ou soustractif selon la densité de l'image.

7. Classes et régions

Classes

Une classe est un sous-ensemble de l'image, contenant tous les points partageant une caractéristique commune. On peut par exemple considérer l'ensemble des couleurs comme un ensemble de classes ; mais, en général, cela n'aura pas beaucoup d'intérêt, et l'on cherche des classifications plus restrictives. Une partie des opérations que nous avons montrées à propos des couleurs  créent par nature des classification (toutes les palettes, en particulier). 

On peut aussi chercher des classifications "significatives". Par exemple celle que nous proposons avec classify, construite pour reconnaître les types de "sujets" : campagne, ville, intérieur, tête, nu.
On peut voir la répartition en classes avec show_classes.
On peut faire des choses amusantes avec classe_texture. (attention, c'est long);

 Noter que

- les pixels appartenant à une classe peuvent être répartis dans toute l'image, sans êre jointifs.

- certains pixels peuvent appartenir à plusieurs classes.

Quand Roxame classe les pixels, elle le fait en créant un tableau d'entiers de même taille que l'image, et en notant pour chaque point les classes auxquelles il appartient.

On peut supprimer une classification existante avec declass

Régions

 Une région est un sous-ensemble connexe de pixels présentant une caractéristique commune (en pratique, pour Roxame, la couleur). La détermination des régions, ou segmentation, s'obtient aussi en notant pour chaque point la région à laquelle il appartient.

Attention : la segmentation prend beaucoup de temps (souvent plus d'une minute sur une image de 640.480 pixels).
Une représentation simplifiée de la segmentation apparaît en bas d'écran.

On peut segmenter une image brute sans autre préparation, avec segment0  Mais, sutout avec une image "naturelle", on aura presque autant de régions de que de points et l'opération est sans intérêt. Il y a donc intérêt à procéder préalablemnet à une classification ou à une réduction du nombre des couleurs.

Roxame peut utiliser à cet effet toute sa panoplie de palettes et ses fonctions de classification. segment1 utilise la fonction classify ci-dessus, à caractère un peu sémantique. segment2 a  un caractère plue neutre, basée sur une partition en 8 classes, définies pour chaque image par une division équitable des trois pararmètre ton, saturation et valeur. Cette dernière fonction ne donne en général pas de bons résultats avec une image en à-plats.

Un grand intérêt créatif des régions est que l'on peut ensuite appliquer des opérations à chaque région, notamment des filtrages, dégradés et applications de formes géométriques.

Le résultat de la segmentation est affiché, avec des couleurs arbitraires, dans la deuxième petite icone en dessous de l'image principale.

On peut supprimer une segmentation existante avec deseg (ou bien en faisant une autre segmentation).

8. Chargement d’une image, mise en réserve, écran auxiliaire

Rien de plus simple, il suffit de taper le nom de l’image voulue, par exemple Manh Mais attention, il faut que ce nom ait été entré dans le dictionnaire (en première colonne), avec doc dans la colonne catégorie et le sous-répertoire dans définition. L’image doit être au format .JPG (attention, il y a des problèmes si l’extension est en minuscules).

Si les proportions de l’image ne sont pas exactement celles du format de travail de Roxame (en général 640.480 pixels, ou la taille du plein écran), son chargement doit l’y adapter. Il y a trois solutions, que l’on choisira en indiquant préalablement le mode choisi

- homoth l’image est étendue bord à bord dans les deux sens, ce qui en général la déforme (mais ce n’est pas toujours gênant) ( mode clip_no)
- crop une partie de l’image est émargée (horizontalement ou verticalement selon les formats)(mode crop)
- complement l’image est chargée en totalité et Roxame rajoute des rectangles gris sur les côtés ou en haut et en bas (mode complement).

load recharge le dernier fichier image chargé
load_ charge refInput
load_2 charge dans img2
rand_file charge un fichier pris au hasard dans le répertoire en cours
rand_diccan charge un fichier du répertoire diccan/images

next charge l'image suivante dans le répertoire en cours. avec retour au début en fin de répertoire
preced charge l'image précédente (mais revient mal au début)
first charge la première image
last charge la dernière image
rand_file ou file.rd chargent une image au hasard depuis ce répertoire
rand_diccan charge un fichier au hasard depuis le répertoire c://!!!SITE_WEB/Images

Mise en réserve et rechargement

L’image affichée à l’écran peut être mise en réserve en dix endroits différents, il suffit de taper une des fonctions reserve1, reserve2. reserve9.

L’image ainsi mise de côté sera rechargée avec la fonction correspondante  reload1, reload2 reload9.

On peut aussi recopier l’image en cours dans un fichier auxiliaire par la fonction tabix (dont une icône s’affiche en bas de l’écran). On peut ensuite la récupérer et la combiner avec l’image à l’écran par une des fonctions. Attention, certaines fonctions utilisent tabix, donc ne l'utiliser que pour réemploi immédiat, et notamment pour les mélanges, grâce aux fonctions :

tabim3 : mélange soustractif
tabim4 : mélange additif
tabim0 : simple remplacement

Attention : ce fichier auxiliaire peut aussi être utilisé par Roxame et il ne faut donc pas y garder des images au-delà d’une opération simple.

Sauvegarde des œuvres

On peut sauvegarder une œuvre existante avec la fonction save. Mais il y a des risques de confusion.

Si l’on sauvegarder définitivementl’œuvre, le mieux est de faire nww, qui donnera à l’œuvre un numéro unique, la sauvegardera dans le répertoire Sas, et réinitialisera le systme pour l’œuvre suivante, avec une page blanche et les paramètres standard (tracé en sépia, au centre, de taille moyenne, etc.).
Si l'on veut retrouver l'image qui était présentée au moment de cette sauvegarde, la mettre de côté avec reserve1, puis la récupérer dans le nouveau travail avec reload1.

 

9. Textes

Un certain nombre de fonctions ont été développées spécialement pour les index de diccan, mais pourraient servir à tout autre chose. L'idéal serait de pouvoir générer les indexes directement à partir du texte du dictionnaire. Pour l'instant, je ne suis pas en mesure de le faire, et je mets donc à jour, manuellement, un fichier de base, Artistes.txt (dans le répertoire Roxame). A partir de ce texte sont effectués des tris et des éditions de plusieurs indes.

Ecriture d'un petit texte dans l'image en cours à partir du clavier

 

.tx. Par défaut, affiche le texte tapé en haut à gauche. La taille est tirée au hasard.


textc_x et textc_y le fixent directement, notamment pour .tx taper par exemple 200 textc_x et 200 textc_y puis taper par exemple hello.tx (pas génial comme syntaxe, on essayera de faire mieux);


Les polices sont définies par leur nom :
aharoni angsana angsana_bold angsana_bold_italic angsana_italic angsana_new
angsana_new_bold angsana_new_bold_italic
arabic arabic_bold
arial arial_black arial_bold arial_bold_italic arial_italic arial_narrow tahoma
La police par dfaut est arial.

On peut faire varier la taille des caractères, (attention, changements inopinés)

On peu faire varier la couleur des caractères avec redtext, greentext, bluetext, blacktext, whitetext, yellowtext, siennatext, sepiatext. La couleur est white par défaut.

Chargement de fichiers de texte

Un nom de texte, s'il a été chargé dans le dictionnaire, sous la forme Nomdetexte text Textes, suffit à le charger.

tload ou load_T rechargent le dernier fichier de texte . Mais il n'y a pas d'affichage.

9.4. Génération de (fichiers .txt ou .html) textes


text service 1340
text_ liste


- void textDate() appelée par tdate
- void textIndex(int indexColumn)
- void textSave(String textTosave, int column, int columnSup)
- void textEdit() appelée par tedit
- void txtConcat(String txtTobecopied) appelée par tconcat

 

String nextWord(int int1, int int2)
//int 1, type of operation, int2 line number
int1 : 0 loading the text, 1 random phrase 2 phrase succession


int textLocate(String wordtobefound){

catégorie text appelée dans le ddo

Servicees :
case 12 : tstx
case 27 : //nbRegText
case 110 : txtLoad(refDirectory + "data\\" + refTextSubdirectory + "\\" + refText + ".txt" ); break; //loadT
case 111 : firstTextFile(); break;
case 112 : nextTextFile(); break;
case 113 : precedTextFile(); break; //precedT
case 114 : lastTextFile(); break;
case 115 : randomTextFile(); break;

case 131 : refLine = 1; ; refWord = 2 ; Scroll(textLine[refLine]); break; //firstL
case 132 : refLine = (min (refLine+1, refTextLength)) ; Scroll(textLine[refLine]); break; //nextL
case 133 : refLine = (max (refLine-1, 0)); Scroll(textLine[refLine]); break; //precedL
case 134 : refLine = refTextLength; Scroll(textLine[refLine]); break; //lastL
case 135 : refLine = ( (int) random(refTextLength +1 )); Scroll(textLine[refLine]); break; //random_L

case 141 : refWord = 2; Rread(textLine[refLine]); Scroll(readword[refWord]); break; //firstW
case 142 : refWord = 1 +(min (refWord+1, readwordscount)) ; Rread(textLine[refLine]); Scroll(readword[refWord]); break; //nextW
case 143 : refWord = (max (refWord-1, 2));Rread(textLine[refLine]); Scroll(readword[refWord]); break; //precedW
case 144 : refWord = 1 + readwordscount;Rread(textLine[refLine]); Scroll(readword[refWord]); break; //lastW
case 145 : refWord = 2 +(int) random(readwordscount-1 ); Rread(textLine[refLine]); Scroll(readword[refWord]); break; //random_W

case 146 : refChar = 0; Rread(textLine[refLine]); Scroll(String.valueOf(refChar) +"e character : " +readword[refWord].substring(refChar, refChar+1)); break; //firstC
case 147 : refChar = (min (refChar+1, readword[refWord].length()-2 )) ; ... //nextC
case 148 : refChar = (max (refWord-1, 2));Rread(textLine[refLine]); Scroll(String.valueOf(refChar) +"e character : " +readword[refWord].substring(refChar, refChar+1)); break; //precedC
case 149 : refChar = 1 + readwordscount;Rread(textLine[refLine]); Scroll(String.valueOf(refChar) +"e character : " +readword[refWord].substring(refChar, refChar+1)); break; //lastC
case 159 : refChar = 2 +(int) random(readwordscount-1 ); Rread(textLine[refLine]); Scroll(String.valueOf(refChar) .... //random_C
case 202 : //dicoHTML
case 204 : //presentHTML
//Write parameters
case 1340 : refText = scriptWord[3]; break; //text
case 1341 : refFontName = scriptWord[3]; break; //font
case 1342 : refTextX = Integer.parseInt(scriptWord[3]);break; //text_x
case 1343 : refTextY = Integer.parseInt(scriptWord[3]); break; //text_y
case 1344 : refFontSize = Integer.parseInt( scriptWord[3]); break; //font_size
case 1345 : //text_color


case 1376 : refTextX = number; break; //textc_x
case 1377 : refTextY = number; break; //textc_y


case 1403 : //tsort
case 1404 : //rsort : en ordre inverse
case 1405 : //ssort, sans suppression de la colonne choisie
case 1406 : //tconcat
case 1407 : //tload
case 1408 : //tedit
case 1409 : //tfilter
case 1410 : //tfilter

 

dico environ 13
dico string_ dico = new String[5000][3];
dico.l list dicoLoad dicoSave dicoLocate dicoSort dicoSupp dicoInsert
dico// service 1693
dicoFile string dicoFile ;
dicoHTML service 202
dicoLenght int number of words in the dictionary
dicoLine string = new String[5000] ;
dicoLocation string ???String dicoLocation ;
dicoString string dicoString; int nbchar = 0;
dicoload service 10
dicomots text Texts
dicomots_T text Texts
dicoq service 1694
dicosave service 4

nextC service 147
nextL service 132
nextR service 122
nextT service 112
nextW service 142

precedC service 148
precedL service 133
precedR service 123
precedT service 113
precedW service 143

random_C service 159
random_F service 105
random_L service 135
random_R service 125
random_T service 115
random_W service 145

rdwrite form 210
rdwrite_v form 1516

redtext parameter 180
whitetext parameter 184

text service 1340
text_ list Garcilaso 7_pierres Algoristes Theater Ronsard1
text_color service 1345
text_x service 1342
text_y service 1343
textedate text Texts

write_ list letters phrases. letters fait un semis de lettres, phrases un semis de phrases
letters service 2004
phrases generator 12

dans le dico, catégories
- font
- text
- list

if(SUFFIX.equals("tx")) {textText = strlocloc ;
Scroll("intx");
text (strlocloc ,10 + cornerx, (wheight*9)/10 + cornery) ; }

case 90 : refFontSize = number ; break; //fontsize

case 170 : if (refFontName.equals("arial")) refFontSize = 12 ; else refFontSize = 24 ; textSize(refFontSize); break ; //H0
case 171 : if (refFontName.equals("arial")) refFontSize = 48 ; else refFontSize = 96 ; textSize(refFontSize); break ; //H1
case 172 : if (refFontName.equals("arial")) refFontSize = 36 ; else refFontSize = 72 ; textSize(refFontSize); break ; //H2
case 173 : if (refFontName.equals("arial")) refFontSize = 24 ; else refFontSize = 48 ; textSize(refFontSize); break ; //H3

 

 

 

10. Evaluation et critique

Roxame dispose d'un système de mesure, et s'en sert dans différentes phases de ses processus

La plus utilisée est la "complexité" (nom de code difg) prise ici dans un sens tout à fait élémentaire mais, à l'expérience, fort efficace : le nombre de pixels qui sont différents du pixel à gauche et/ou du pixel au dessus.  
- difh int the proportion of pixels differing from the upper one
- difv int the proportion of pixels differing from the left one
- dgen est le nombre de points non blancs
- dnsR, dnsG et dnsB donnent le pourcentage de points comportant un peu de chacune de ces couleurs ; noter que, pour une image blanche, ces trois valeurs sont de 100
- dsat est la valeur moyenne de la saturation (ssat)
- dval est la valeur moyenne de la luminosité (vval) 

Toutes ces valeurs peuvent être affichées (à gauche) en tapant affeval . Bien qu'il ne s'agisse pas à proprement parler d'une mesure, on lit aussi le nombre de régions, qui a son importance pour l'évaluation d'une image.

11. Hasard,  autonomie, génétique, création

Réalisations avec Primeval et Alkwarel

12. Projets avec Arduino

En cours.

 

 

13. Générateurs

14. Macros, dictionnaire, présentations, scripts

 

Dictionnaire

Pour un bref accès au dictionnaire, taper dico, qui remplace l’œuvre en cours par le début du dictionnaire.

On peut ensuite s’y déplacer avec les touches Right, Left, Up, etc. Et modifier la définition des termes existants.

F1 trie le dictionnaire sur la première colonne (termes). Attention, le tri de Processing ne correspond pas à l’ordre lexicographique habituel. Les majuscules viennent en tête, les lettres accentuées en queue.

F2 trie le dictionnaire sur la deuxième colonne (catégorie), et F3 sur la troisième (définition)

F4 insère une ligne nouvelle pour ajouter un nouveau terme. L’endroit choisi est de peu d’importance, et l’on pourra toujours demander à nouveau un tri. Il est cependant prudent de trier d’abord sur les termes, pour éviter un double emploi (dans ce cas, c’est le premier terme trouvé, en commençant par le début, qui sera exécuté).

F5 supprime une ligne

Pour que cette création est un effet il faut

- que la catégorie soit une catégorie existance (éventuellement, voir ci-après la prorammation), rien n’empêche d’en créer de nouvelles ; si la catégorie n’existe pas, le mot est ignoré et Roxame passe au terme suivant

- que la définition corresponde au traitement de la catégorie ; sinon, il y a risque d’erreur.

Pour certaines catégories, il est facile de modifier ou de développer le dictionnaire :

- color :  le nom de la couleur et en définition les trois entiers correspondant à la définition RGB

- doc : le nom de l’image et le sous-répertoire où elle figure

- macro_  (noter le caractère souligné, indispensable car macro est un mot réservé) ; mettre en définition la suite des mots à exécuter

- text : comme doc

- present  comme doc

- script comme doc

En revanche, les autres catégories exigent de développer le code correspondant au sein du programme de Roxame. Voir la partie correspondante plus bas.

Présentation

Ce mode de fonctionnement a été conçu pour permettre d’utiliser Roxame « à la powerpoint ». Il faut pour cela rédiger un texte, au format .txt, et prévoir l’appel dans le dictionnaire, avec le sous-répertoire en définition. Quand on tape ce mot, Roxame se met automatiquement dans le mode adéquat. On fait ensuite dérouler avec les touches du curseur :

//figure

Les règles d’écriture sont les suivantes :
- tout le vocabulaire de Roxame peut être employé (en principe…)
- mettre un seul terme de Roxame par ligne (pour l’instant)
- on peut indiquer le langage ( french ou english, par défaut, french)
- on peut préciser la position
- une nouvelle page commence par NP
- on affiche le fond
- on précise la couleur de texte
- on précise la dimension
- ensuite on peut mettre des lignes de texte,
. si elles commencent par < elles ne seront affichées que dans le mode « french »
. si elles commencent par > elles ne seront affichées que dans le mode « english »
. si elles commencent par | elles seront affichées dans les deux cas (si elles ne commencent par aucun de ces caractères, Roxame tentera de les traiter comme des macro_)
-  il y a différentes positions pour afficher les images
- il y a moyen de faire des boucles itératives (encore un peu aléatoire…)
- terminer par les lignes
:
End
NP

Script

A l’étude, en se servant du travail fait pour la présentation

text_x, et text_y : dans les scripts

Perspectives de développement

15. Travaux pour Diccan

Création des index d'artistes

Le fichier de base, mis à jour manuellement, est Artistes.txt, dans le répertoire !!!SITE_WEB.

Le travail est lancé par la commande indexes , une macro qui appelle : index_pre index_alpha_ index_dates_ index_geo_ index_specialite_ index_notoriete_ index_generatif_

Roxame commence par recopier Artistes dans le répertoire Roxame/data/Texts. index_pre : indexcopyartists Artistes tload n 02 ssort
et dans la foulée fait un un tri alphabétique.
La commance tload charge le fichier annoncé précédemment, et (fonction totextitems, qu'on ne peut appeler en ligne de commande) transforme la série de lignes en tableau de strings, sur lesquels ont peut donc travailler colonne par colonne

Elle procède ensuite à la création des différents indexes, par exemple, pour l'alphabétique : tloadartistes 01 tsort Artistes_index_alpha tload Artistes1 tconcat tedit fond_page_alpha tconcat tedit
Cette macro charge le fichier artistes, le trie par ordre alphabétique et produit le un premier fichier Artistes_index_alpha
Puis elle le recharge, et le concatène successivement avec Artistes1 et fond_page_alpha, et conclut par une édition finale.

Nota :
tloadartistes . (service 1414) try{textLoad("c:\\!!!SITE_WEB\\Artistes.txt", 0);. fait le textload de artistes
01 tsort (service 1403) textSort(number, 'd', 0); : tri sur la colonne 1, en ordre alphabétique croissant, et édite un texte en HTML en supprimnat la colonne 0
tload : chargement du fichier d'entête
fond_page_alpha tconcat tedit concaténation avec la fin de page et édition finale.

Les colonnes de tri sont :
alphabetique 01 (02 donnerait les prénoms)
geographique 03
specialité 04
dates 05
notoriété 06
generatif 07
genre 08

Fichiers :
Artistes1 à Artistes7 : fichier intermédiaires, triés avec date mais sans inter
fond_page_alpha , fond_page_geo, fond_page_generatif: bas du tableau avec les totaux
fonddepagealpha1 : partie finale, avec les partenaires et leurs logos

? indexcopyartists service 1415

 

 

16. Le code Processing

Conception générale de la programmation

Actuellement le code est organisé en plusieurs pages (« tags ») de Processing. Cette répartition n’a pas la prétention d’être complètement rationnelle, d’ailleurs. Les noms ont été en partie choisis pour obtenir un ordre pas trop mauvais dans l’affichage du code dans l’éditeur

La répartition entre pages n’est pas totalement rationnelle non plus. Mais comme Processing a parfois des réactions bizarres quand on change les pages, le code reste tel pour l’instant.

On notera que, comme toujours en Processing, il y a deux fonctions de base, setup et draw. Elles sont toutes les deux dans la page zMain. La fonction draw est réduite à la plus simple expression, avec l’instruction  Ddo(wordtobedone) qui invoque le parser pour exécuter le « prochain mot à traiter ». Ce mot venant soit d’une frappe au clavier, soit de la pile word_on_stack (indexée par l’entier stkl).

Son exécution est conditionnée par le fait qu’on ne soit pas en pause et qu’on doit dans un mode de dialogue qui autorise l’automatisme.

Le mode théorique normal de fonctionnement de Roxame, conçue pour être un « peintre » aussi autonome que possible, est que cette boucle tourne indéfiniment.

Toutes les autres fonctions sont appelées par ce parser. En principe le parser ne fait rien d’autre que de piloter les autres fonctions. Il y a de menues exceptions. Nous précisons son fonctionnement ci-après (page zDdo).

Bugs et perspectives de développement

Classes et régions

 

Ce sont des valeurs données à chaque pixel, et qui permettent des opérations différenciées, en appliquant différentes fonctions (filtres, dégradés) à l’ensemble

Les régions sont numérotées à partir de 1.  Au départ d’une œuvre, ou après une désegmentation, il y a une seule région. La sélection d’une région se fait toujours par apppel à la fonction R, qui notamment calcule les coordonnées du rectangle circonscrit à la région.  La région zéro renvoie toujours à l’ensemble de l’œuvre.

Au maximum, on pourrait avoir autant de régions que de pixels.  Les bonnes segmentations sont typiquement de quelques milliers de régions.

Principales variables

int[][]region
int regone, nnbreg
int nbregutil : nombre de régions effectivement opérationnelles à un moment donné
boolean[] regocc
int cardreg,
int xd,yd, xf, yf : coordonnées des cotés du rectangle circonscrit à la région 

Lhumeur de Roxame

 Les fonctions correspondantes ne sont pas vérifiées en ce moment, et ne sont pas utilisées. Mais il suffirait de s’y mettre.

 Principales variables

Int opnn,hapn,enrg,ptnt

Voici maintenant le contenu des différentes pages Processing.

Roxame : declaration de variables, quelques fonctions à caractère général

Principales variables 

Int number :  variable temporaire pour envoyer un entier à une fonction à partir du parser (par le clavier ou une macro)

On remarquera le caractère peu orthodoxe de cette programmation, avec un grand nombre de variables globales. Cela est dû notamment à la nécessité de pouvoir facilement accéder à tous les paramètres depuis n’importe quelle partie du code.

Nota  les noms de variable commençant par ref désignent les paramètres « courants » : couleur, région, etc.

PImage  img, imgx, imgy, imgz
int[][] classe
int[][]classeTab
int[][]cmassecard

Fonctions :

 preInit : initialisations de quelques variables au départ

Reserve : copie en mémoire de l’œuvre (affichée à l’écran) en cours de travail
Reload : récupération et réaffichage d’une de ces images
Scroll :Affichage à gauche de l’écran des opérations effectuées
R : sélection d’une région et calcul des paramètres correspondants (notamment les coins du rectangle correspondant,  xd, yd, xf, yf.
Les régions sont en général obtenues par segmentation, mais un certain nombre de régions ont été précalculées (numérotées à partir de 1000000 pour ne pas risque de confusion), notamment pou faciliter la préparation de présentations.
Log : établit un fichier des opérations effectuées, pour l’édition ultérieure de rapports

Bugs et perspectives de développement

A_Measure : mesure et évaluation

Cette page regroupe plusieurs fonctions, que l’on pourrait globalement qualifier de « descriptives »
-  de simples fonctions de mesure
-  des fonctions de reconnaissance (des formes, la reconnaissance des couleurs est dans la pge couleur)
- les fonctions de classification et de segmentation, qui affectent à chaque pixel un numéro de classe et/ou un numéro de région
-  une fonction globale d’évaluation 

Principales variables 

  int cardreg ;
  int  regmax,  nbregutilx ;
  int xd = 0;  int yd = 0;  int xf= wwidth -1 ;  int yf= wheight - 1 ; 
  int lobpix, hobpix;
  int[][] semclass ; //= new int [wwidth][wheight]; 
  int MaxHue, MinHue, MaxSat, MinSat, MaxVal,MinVal;
int HueDom,  ValHueDom  ;
  float[] minCoul = new float[3]; float[] maxCoul = new float[3];
  int dval,dgen,difh,difv,difg, dsat, dnsR, dnsG,dnsB , totdifcoul
  int  dwrm, dvif ;
  int[] histo = new int[360];
  int totval, tothistob;
  int nbvalhisto, nbvalhistoh, nbvalhistos, nbvalhistov;
  int[][] bhi = new int[360][48];
  int quadType;
int[][] winnerregion = new int[3][2];

 //analyses after face_detect
int cpxGain = 0 ;
int szeGain = 0 ;
int dsRGain = 0 ;
int satGain = 0 ;
int valGain = 0 ;
int focDepx = 0 ;
int focDepy = 0 ;
int skinHue = 0 ; 
int skinVal = 0 ;
String workTypename

Fonctions :

M : série de mesures sur l’image affichée .
Histo : calcul d’histogrammes sur l’image affichée
Averagecolreg : calcul de la couleur moyenne d’une région
Averagecolclasse : calcul de la couleur moyenne d’une classe
Segment0 : segmentation sur l’image affichée. Nota : pour obtenir des résultats valables, il est recommandé de ne pas appliquer cette segmentation à une image complexe. On peut donc s’en servir soit pour des images simples, soit en simplifiant préalablement l’image, par exemple avec un filtre
Segment1 : commence par un calcul de classes et l’alignement des pixels sur leurs classes, puis applique Segment0
Segment2 : commence par répartir les couleurs en huit catégories puis applique Segment0
Desegment : remet la région de chaque pixel à 1

Classify : affecte une classe à chaque pixel
showClasses : modifie la valeur de chaque pixel, créant une teinte uniforme pour chaque classe, et l’affiche

Segment6 : segmentation après une classification conçue spécialement pour le portrait

Rec_Quad(regloc) : recherche’un quadrilatère schématisant la région regloc
Rc_Oct : recherche d’un octogone pour une région donnée
Rec_TypQuad : reconnaissance du type d’un quadrilatère
Rec_Sky : reconnaissance du ciel (intéressant pour les paysages)
Rec_Face : reconnaissance des contours d’un visage (fait avant d’avoir découvert OpenCV)
Rec_Eyes : reconnaissance des yeux

FaceRegion : ??
FaceEyes : ??

moodSynth : calcule l’humeur de Roxame
Emot : modifie l’humeur de Roxame

grainGen : générateur de grain
Longuet : comparaison d’images fait pour Alain Longuet
Evaluation : fonction d’orientation à partir du parser, et quelques petites fonctions exécutées sur place

Bugs et perspectives de développement

Colors: gestion de la couleur

Principales variables 
String[] colorName, refColName
int refHue, refSat, refVal, refRed, refGrn, refBlu
color refCol
String paletteName

 Fonctions 

Rgbhsv : fournit les valeurs hue saturation value d’une couleur donnée
Hsvrgb : fournit les valeurs RGB correspondant aux valeurs h,s,v  courantes
C : ??
setPalette : construit une palette
cPalettealign :  aligne une couleur sur la palette en cous
paletteAlign : aligne les points de l’image en cours sur la palette désignée en utilisant la fonction cPalettealign
setTubeset : construit une palette de « tubes »
cTubesetalign aligne une couleur sur le tube
tubesetAlign : aligne les points de l’image en utilisant cTubesecalign
tubesetFiller : pour tests, met toute l’image sur une valeur du tube
tubeShow : appelé par tube name + .sh, montre la gamme des couleurs du « tube »

Bugs et perspectives de développement

 Dico

Gestion du dictionnaire, notamment son chargement, sa mise à jour
Le dictionnaire est chargé en mémoire au moment du lancement, la structure du fichier .txt étant traduite dans un tableau de chaînes à trois colonnes.

C’est ce fichier qui est utilisé en cours de travail, avec mise à jour du fichier externe assez fréquemment, notamment à chaque fin d’œuvre et après toute intervention directe au clavier en mode dialogue dico

Principales variables 

String dicoFile
int dicoLength

Fonctions :

dicoLoad : charge le dictionnaire (en début de session)
dicoSave : met à jour le dictionnaire (chaque fois qu’on le modifie, notamment le numéro d’œuvre en cours
dicoLocatenearest : recherche du mot le plus proche (ne marche pas bien)
dicoLocate : cherche le numéro de ligne pour le mot demandé (essentiel pour le parser notamment)
dicoEnter : changement de mode de dialogue, pour permettre en ligne la modification du dictionnaire (voir keypress)
dicoSort : trie le dictionnaire, soit par termes (F1), soit par catégories (F2) soit par définitions (F3)
dicoSupp : supprime un mot du dictionnaire (F5)
dicoInsert : ajoute une ligne au dictionnaire pour introduire un nouveau mot (F4)
dicomotsLocate : ?
dicoToHTML : prépare un fichier HTML à partir du dictionnaire
evalStore : ?

Bugs et perspectives de développement

 Généralisation de la référence à des textes extérieurs :
- le dictionnaire proprement dit est réduit à noyau avec les termes majeurs
- les documents et autres textes sont appelés par un dictionnaire annexe
- les macro_ peuvent être remplacées par des « scripts » externes, à la limite de vrais programmes, dont les présentations ne sont qu’un cas particulier.

Cela conduit à réfléchir sur ce que pourrait être idéalement le langage de Roxame, question largement ouverte et aux implications à la fois artistiques et psychologiques, sinon neuro-scientifiques…

File

Accès aux fichiers d’images et de textes

Principales variables 

String fileTobeloaded
boolean fileLoading pour éviter des interruptions
boolean loadedDoc. Utile pour la génération de la critique

Fonctions :
txtLoad : charge un texte
fileNumberlocate : cherche le rang d’un fichier dans son sous-répertoire
jpgLoad : charge une image et la cadre en fonction du paramèter refClip
nextFile : charge l’image suivante dans le répertoire (important quand on travaille en série)
precedFile : charge l’image précédente dans le répertroire
firstFile : charge le premier fichier du répertoire
lastFile : charge le dernier fichier du répertoire
randomFile : charge un fichier du réperoire choisi au hasard
nexTextFile : charge le texte suivant
precedTextFile
firstTextFile
lastTextFile
randomTextFile

Bugs et perspectives de développement

Filters 

La plupart des filtres peuvent s’appliquer exclusivement à une région donnée.

Exemples de filtrages

Le document original

graying

smart_graying

blue_toning

negative

gradient

 

contours

etching

blur blur blur

ranfuzz

Principales variables 

Les filtres (en tous cas ceux figurant ici) n’ont pas de mémoire en dehors de leur exécution. Les variables sont donc locales.

Fonctions 

H : assigne une valeur au paramètre refHue
S : assigne une valeur au paramètre refSat
V : assigne une valeur au paramète refVal

F : série de filtres
f : série de filtres, opérant pixel par pixel sur l’image affichée, sur les valeurs HSV, avec conversion à partir des valeurs RGB du pixel, et restitution in fine des valeurs RGB
FP1 : filtres avec un paramètre
FPN : filtres par quatre paramètres

Contours : fournit les contours (différents types de calcul, avec des paramètres)

Ranfuzz : « flou aléatoire »
Ranfuzzh : comme Ranfuzz, mais n’opère que horizontalemnet
Ranfuzzv : comme Ranfuzz, mais n’opère que verticalement

Pixelize : découpe l’image en petits carrés, en calculant la couleur moyenne  pour chaque carré
medianNum : amène (ou essaye d’amener) l’image à une complexité donné en appliquant répétitivement le filtre médian

colorWheel : pour mémoire, actuellement cette foncdtion est obtenue par chargement d’une image

Filter : fonction d’orientation dans les fonctions précédentes à partir du parser

Bugs et perspectives de développement

Forms : générateurs de formes

Exemle de quelques formes, générées par :

rectangle,  yellow paint circle, any lines, any lines 

Principales variables 

int  x1cont, y1cont, x2cont, y2cont, x3cont, y3cont, x4cont, y4cont , x5cont, y5cont, x6cont, y6cont, x7cont, y7cont, x8cont, y8cont;
int locwidth = 0; int locheight = 0;
int workStep = 30;
int xp,xt, yp, yt, xc, yc , r;
int xorig, yorig, xtarg, ytarg ;
int alx, aly, xcref, ycref ;
int rx, ry;
int[][] rex

Fonctions :

A1 : calcule les paramètres de génration à partir d’un rectangle donné
A :  affecte un numéro de posiion et lance la fonction AA
AA : calcule le rectangle de position à partir des paramètres (notamment refSize et refProp)
T : affecte une valeur à refSize et lance AA
Q : affecte une valeur à refProp et lance AA
Regtabmix : segmentation sur le « calque » rex
Do-Form : construit effectivement la forme en utilisant les fonctions xMoveTo et xLineTo . La forme est tracée dans imgx, puis reportée par la fonction Report
sMoveTo : fixe les valeurs xp et yp
xLineTo : trace une ligne depuis xp.yp en utilisant la fonction mLineTo
mLineTo : trace une ligne en utilisant la fonction mkLine
mkLine : trace le motif pour mLineTo
Report : reporte une forme en fonction du mode de mélange et de clipping
Parameter : assignation de paramètres en provenance du parser
Position : assignation de positons en provenance du parser
Form : lancement du calcul d’une forme à partir du parser

Comment modifier le code, rajouter des fonctions :

- dans Do-DForm : ouvrir un nouveau case, et trace des segments de la même manière que les autres formes
- dans mkLine, faire d’autres motifs (il faudra ensuite gérer le chemin d’accès)
- dans Report : ouvrir un nouveau case ; on peut imaginer indéfiniment des modes de mélange

Bugs et perspectives de développement

Gen_gen : générateurs plus complexes

Fonctions :

backGround : arrière plans pour générateurs automatiques
segApla : à partir d’une image et d’une segmentation, calcule la couleur moyenne dans chaque région et l’applique à chaque pixel de la région
Gen_reg_gen : fonction générale de génération (fonctionnement peu sûr dans l’état actuel)

AG : générateur d’images « abstraites »
Generator : fonction d’appel des fonctions à partir du parser, et un certain nombre de fonctions détaillées dans les case

- 1. Background, ci-dessus
- 2. Segapla ci-dessus, après paramétrage
- 3. AG ci-dessus
- 4. Binim ; une sorte de ver
- 5. Champery
- 6. Synth2 : formes sur un espace minimal ( ?)
- 7. Synth 3. Comme 2
- 8. Synth 4. Image à partir de textes
- 9. Synth5 . « a machine language »
- 10. Génération d’un nuage à partir du centre
- 11. Permutation d’espace ; différentes formules en fonction de « number »
- 12. Affichage de phrases
- 13. Essai de Chrismas. Ne marche pas
- 14. Titre
- 15. Autre titre
- 16. Ecriture d’un texte dans une région
- 17 classe-texture. Générateur plaçant des textures dans une image précédemment classifiée
- 18. Ecriture d’un texte

presentationToHTML : transformation d’un présentation en un texte HTML

CB : générateur d’un fonds « bande dessinée » et segmentation associée

Bugs et perspectives de développement

Geom : géométrie, morphogéométrie

Principales variables 

Pas de variables persistantes en dehors de l’exécution des fonctions

Fonctions 

Sym : symétries, avec toute une gamme de variétés
Geom : fonctions morphogéométriques, avec toute une gamme de variétés
Geom2 : idem, mais avec extension du blanc aux dépens de la couleur comme dans Geom
Geometry : fonction d’appel des fonctions à partir du parser
Translate : translation d’image
Geom2_sclass : opérations morphogéométriques sur le calque des classe

Bugs et perspectives de développement

OpenCV : fonctions faisant appel à OpenCV

Principales variables 

int trectxd ,trectyd,  trectww , trectwh ;
int irectxd, irectyd, irectww, irectwh;
int jrectxd, jrectyd, jrectww, jrectwh;

Fonctions

 face_detect : détection du visage et cadrage,  sur  une image fournie par la caméra  (dictionnaire : fdet)
faceDetectNext : détection du visage et cadrage, sur une image chargée à partir du fichier (l’image suivante dans le même répertoire)
fdetFrame : cadrage du visage

Bugs et perspectives de développement 

Report : generation de rapports (critique, etc) 

Principales variables

 String differentColors = "";
String[] subject_type = {"Interior", "Country","Head", "Academy", "Town", "Forest"};
int subject_t ; //= new int[20] ;
int subject_rec_qual ;
int globscore ; 
int rangeh = 0; int ranges = 0; int  rangev = 0; 

Fonctions 

fileDescr : description de l’image pour création d’un rapport
Critique : fonction synthétique de critique d’une œuvre
Framint : non opérationnel
Wokmood : non opérationnel

Use_of_color : fonction d’évaluation de l’usage de l’espace des couleurs
Use_of_luminosity : évaluation de l’espace des luminosités
Recsu : reconnaissance du sujet traitéFrame : non opérationnel

Bugs et perspectives de développement 

Gradations

Dégradés

Principales variables

 Pas de variables persistantes.  

Fonctions :

Deg : fonction générale d’exécution d’un dégradé sur une région
DegGen : fonction commandant la précédente
DegGenReg : ?

Bugs et perspectives de développement

Devrait être étendu aux textures

zDdo : le parser et fonctions annexes

Conception générale

La fonction centrale est le parser lui-même, Ddo.  Ddo2  Rread et List sont des fonctions auxiliaires pour préparer ou faciliter cette fonction, qui est contamment appelée par la « runnable » de Roxame, la fonction Procesing draw.

Ddo exécute toujours une chaîne de caractères.

Dans le cas le plus simple, cette chaîne est un mot figurant dans le dictionnaire. Dans ce cas, le dictionnaire fournit pour ce mot une catégorie et une définition, et il n’y a qu’à procéder à son exécution en utilisant ces précisions.

Les catégories sont actuellement les suivantes (mais rien n’empêcherait d’en rajouter) :

- color : la couleur demandée est choisie comme couleur « en cours » ; son nom est assigné à la variable de chaîne  refColName ; la définition fournit lezs trois valeurs RGB (refRed, refGrn et refBlu), et on calcule les valeurs refHue, refSat et refVal correspondantes
- colorb : assigne à la variable rgbTemp la définition
- comment : affiche le mot et la définition en bas d’écran
- cond : à l’étude pour disposer de structures de contrôle
- doc : charge (fonction jpgLoad) l’image de ce nom, à chercher dans le sous-répertoire de data\ donné en définition
- environ : assigne un certain nombre de paramètres d’environnement par l’intermédiaire de la fonction Environnement() paramétrée par le numéro donné en définition
- evaluation : appelle les fonctions d’évaluation par l’intermédiaire de l’instruction d’orientation Evaluation() paramétrée par le numéro donné en définition
- directory : assigne comme sous-répertoire courant (dans c\Roxame\data\ ) le sous-répertoire indiqué dans la définition
- filter : appelle un filtre par l’intermédiaire de la fonction Filter, paramétrée par le numéro donné en définition
- font : assigne la fonte dans le nom est donné en définition
- form : lance la génération dune forme, par l’intermédiaire de la fonction Form, paramétrée par le numéro donné en définition
- generator : id. la fonction Generator
- geometry : id. pour la fonction Geometry
- list : //à revoir
- loop : en construction pour créer des structures de contrôle, notamment dans les présentations

- macro_ : la définition donne alors une suite de termes qui seront exécutés l’un après l’autre ; pour l’instant, il n’y a pas de structure de contrôle interne à cette catégorie ; mais noter que 
. une macro_ peut s’appeler elle-même ; dans ce cas elle fonctionne en boucle indéfiniment

- une macro_ peut appeler n’importe quel terme du dictionnaire ; par appels successifs, on peut donc construire des « applications » aussi longues que l’on veut, mais dans une mesure limitée puisqu’on ne peut pas faire d’itérations ni de conditionnements (dans la version actuelle)

- parameter : assigne une valeur à un paramètre //revoir

- position : assigne une position pour la génération de forme
- present : lance la présentation indiquée par le terme ; c’est un fichier .txt qui doit être dans le répertoire indiqué en définition
- quad : est une variante de forme
- script : en construction, pour généraliser le concept de présentation à des scripts quelconques
- text : charge le texte de nom indiqué par le terme, et qui doit figurer dans le sous répertoire indiqué en définition

Si le terme demandé ne figure pas dans le dictionnaire, il y a alors plusieurs cas :
- le terme est un nombre ; dans ce cas il est affecté à la variable globale number (un peu dangereux, mais pratique)
- le terme comporte un suffixe, toujours de deux lettres lié au terme principal par un point ; dans ce cas, l’exécution est envoyée à l’instruction List
- le terme est une suite de mots séparés, et la fonction Rread l’analyse et empile les mots sur word_on_stack

Si aucun de ces cas n’est détecté, Roxame affiche  « word not found » et passe au mot suivant de la pile. Si ce mot est !!!work, on passe automatiquement à l’œuvre suivante.

Principales variables 

int stkl
String[] word_on_stack
String[] readWord,
int readwordscount
String[] listWord
int listWordscount 

Fonctions 

Rread : analyse d’un string en mots
Ddo2 : fonction de préparation à Ddo, notamment pour les appels à partir du clavier
Ddo : le parser lui-même

Service : tout un semble d’appels de fonctions (et quelques fonctions écrites ici )  appelées par le parser , notamment :
- 1 pause
- 2 nouvelle œuvre
- 3 affectation d’un nom à l’œuvre en cours
- 4 appel de la fonction dicoSave
- 5 save, sauvegarde de l’œuvre
- 6. Sauvegarde d’un rapport d’évfaluation
- 7 french
- 8 english
- 9 prestDown
- 10 dicoLoad
- 11 delay
- 12  tstx, affichage dun text
- 13 loop
- 14-20 fonctions pour l’animation des presentations
- 21. Assignation à number du nombre de régions
- 22-37 essais de fonctions pour créer des boucles
- 51 sélection d’une région, appel de la fonction R
81-89 appel de la fonction Reload avec différents paramètre
91-99 idem pour Reserve
100-105 fonctions de chargement des images
110-115 fonctions de chargement des textes
121-125 sélections de régions
131-135 sélections de lignes dans un texte
151-145 sélections de mots
146-159 sélections de caractères
150-158 comme 91-99
160-169 comme 81-89
170-173 fonctions Report avec différents paramètres
174 fonction Moodsynth
190. prise de vue avec la webcam
191 variante, sous condition d’image changée
202. création d’une version HTML du dictionnaire
203. assignation d’une position au hasard
204. Lancement d’une présentation
905 : sortie de pause
1144-1282. affichages de valeurs
1287. Mise en pause
1582. Création d’un fichier de description avec fileDescr
1693. passage en mode dico
2012. Affichacge dun commentaire
2009.. ?

nextBit : fournit un bit aléatoire
Nov : mise en place d’une nouvelle œuvre
nextChar : génération ou présentation d’un caractère
nextWord : génération ou présentation d’un mot
textLocate : recherche d’un texte
String : fournit un des mots d’une liste, et exécution des fonctions avec suffixe
rgbTemp ?
loopService : à l’étude, pour exécution de boucles
Condition : id.

Bugs et perspectives de développement

zkeypress : interface clavier et affichage

Principales variables 

boolean keyrel, keypres
Sring mystr, mystr2
int strlen
Int refDialMode
String[] lines
Boolean notscroll
Int logIndex, refLogLine
String[] logline
Boolean notlog

 Pour les présentations :
String prestName
Int prestRank
Int hInpage

Fonctions :

Affich : affichage
keyPressed : saisie du clavie
Environment : différentes modifications des paramètres de l’environnement
- 10. Environnement normal
- 11. Environnement « HD » (plein écran)
- 12. Environnemnet réduit, pour tests
- 13. Environnement « dictionnaire »
- 14. Envronnement « show »
- 16. Environement « script »
- 17 Environnement « présentation »
- 18 dialMode 2
- 19 prestDown
- 89-95 fonctions pour présentation
- 99 retour à l’environnement normal

prestDown : exécution d’une ligne en mode « présentation »

zmain : initialisation, setup, draw

Principales variables

int wwidth, wheight cornerx cornery
String wordtobedone
Boolean isenpause, isenloop, isfunny, isnormal, noloop, nofun
String workName, workName_

Fonctions :

reInitvar : réinitialisations à chaque œuvre nouvelle
initVar : initialisations au départ
setup : fonction de mise en place de Processing
draw : le « runnable » de Processing

Bugs et perspectives de développement

 

17. Bibliographie

Variables :

refTextSubdirectdory. = Texts au départ. Aucune fonction pour le changer ou bien dico[refTextloc][2]
refText = dico[refTextloc][0]
ou bien scriptLine...
textText
retTextLength
refLine, refWord, rerChar
textName
dirct
refTextFileNumber. found by FileNumberlocate
tempdirectoryName
fileName
refTextX, refTextY
hInpage
refTextColor
csynth
textLine (10000)
textItem (1000)(12)
refFont; refRontSize refFontName
refLanguage

9.2. Analyse d'une ligne de texte et traitements

void Rread(String lignealire)

- void toTextitems() appelée en interne par txtLoad
- void textSort(int column, char sort_order, int columnSup) appelée par tsort ou ssort
- void textFilter() appelée par tfilter

tnext loads the following text in the subdirecory

- void txtLoad(String txtAch) appelée par tload (syntaxe : nom du texte, tload)

Le chargement fonctionne comme pour les images. Mais pas pour l’affichage
Fonctions existant auparavant :
void nextTextFile()
void precedTextFile()
void firstTextFile()
void lastTextFile()
void randomTextFile()

regtext generator 16