vendredi 6 juillet 2018

Chapitre 38 : gestion des images avec X11


Nous allons commencer à partir de l’exemple du tutoriel de Ross Maloney (encore merci pour son document) de créer une image en noir et blanc à partir de sa définition sous la forme d’une suite d’octets. Nous allons aussi y ajouter la lecture d’une image toujours en noir et blanc à partir d’un fichier.
En effet en lisant, le tutoriel je me suis aperçu que l’on pouvait facilement créer des images en noir et blanc avec le logiciel bitmap. En première recherche, ce programme ne figurait pas sur mon raspberry. En fait il fait partie du package x11-apps qu’il faut installer avec la commande sudo apt-get install x11-apps. La prise en main du logiciel est rapide vu sa simplicité. J’ai donc créée une image d’un simple cercle que j’ai enregistré dans un fichier img2 dans le même répertoire que notre programme. J’ai vu dans un document sur internet que cette image pouvait avoir l’extension .btm. C’est peut être une bonne idée pour repérer ce type de fichier !!
Pour la création à partir de sa définition, j’ai repris exactement les codes donnés dans le tutoriel. Je n’ai pas trouvé comment coder une instruction sur plusieurs lignes alors j’ai ajouté autant de .byte que de lignes de codes nécessaires.
Dans notre programme, nous reprenons la séquence de programmation des fonctions X11 : ouverture connexion serveur, chargement des polices, création de la fenêtre principale, création des contextes graphiques et gestion des évènements. Le fond de la fenêtre principale est de couleur rouge, le code RGB est récupéré par appel de la fonction XAllocNamedColor après avoir cherché le colormap par défaut par la fonction XDefaultColormap. Ceci est fait pour montrer l’utilisation de ces fonctions car j’aurais pu donner directement le code RGB de la couleur rouge. Ici le nom de la couleur demandé est « red » et il faudrait trouver aussi le nom de toutes les autres couleurs possibles (en anglais !!). Bonne recherche.
 Nous ajoutons une routine de création de l’image à partir de sa définition en appelant la fonction XCreatePixmapFromBitmapData.
Nous ajoutons aussi une routine de lecture du fichier image img2 en appelant la fonction XReadBitmapFile. Ces 2 fonctions retournent un pointeur vers une structure pixmap qui va nous permettre l’affichage.
Ensuite dans la gestion des évènements, nous ne gérons que la fermeture et le clic des boutons de la souris. Si le bouton 1 (le gauche) est cliqué, nous affichons à l’endroit du clic l’image créée à partir de sa définition (et identique à celle du tutoriel) sinon nous affichons l’image lue à partir du fichier img2. Cette image est un cercle blanc sur fond rouge. Vous remarquerez que si vous cliquez sur une image 1 avec le bouton droit, le cercle blanc est bien dans un petit carré rouge.
Voici le résultat :


Autre remarque : les boutons centre et droit de la souris sont numérotés 2 et 3.
Vous pouvez aussi inverser dans la création des contextes graphiques les valeurs Background et Foreground pour inverser les images. Vous pouvez aussi modifier la couleur de ces 2 paramètres car en effet les images bitmap ne sont constituées que de 0 et de 1 sans signification de couleurs et c’est le contexte graphique qui va donner la valeur des couleurs pour le 0 et pour le 1.
Pour l’explication du codage d’une image, veuillez vous reportez à la documentation disponible sur internet (mais il vaut mieux utiliser le logiciel bitmap sur le  raspberry)

Aucun commentaire:

Enregistrer un commentaire