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