Chaque constructeur de calculatrices a choisi de fabriquer sa propre bibliothèque permettant de contrôler directement les pixels de l'écran, bien évidemment incompatible avec toutes les autres :
- kandinsky sur NumWorks
- casioplot sur Casio Graph 90/35+E II
- ti_graphics sur TI-83 Premium CE Edition Python
Nous te présentions dans dans un article précédent notre propre bibliothèque PolyPyNet résolvant ce problème.
Non non, il ne s'agit absolument pas d'une 4ème bibliothèque graphique supplémentaire à apprendre.
C'est en fait une bibliothèque de compatibilité, ultra simple à utiliser pour toi, que tu sois utilisateur ou développeur :
Non non, il ne s'agit absolument pas d'une 4ème bibliothèque graphique supplémentaire à apprendre.
C'est en fait une bibliothèque de compatibilité, ultra simple à utiliser pour toi, que tu sois utilisateur ou développeur :
- Utilisateur, il te suffit de charger les fichiers de PPN sur ta calculatrice et c'est tout, plus besoin de t'en occuper.
- Développeur, tu as juste à remplacer le nom de module constructeur dans tes lignes d'importation par ppn et c'est tout, rien d'autre à changer dans ton script, tu continues à coder avec les fonctions de ta bibliothèque graphique préférée, que ce soit casioplot, kandinsky ou ti_graphics.
Tu es de plus libre d'intégrer, modifier et redistribuer la bibliothèque avec tes scripts.
Nous poursuivons aujourd'hui l'exploration et l'amélioration de cette bibliothèque, avec un script Python développé par Kikoodx pour Casio Graph 90+E, dans le cadre du concours de démo graphiques Python chez Planète Casio.
Il s'agit ici d'un script affichant une image codée en dur, ici une photo de clé USB Casio.
Notons au passage l'affichage de texte décoré, en blanc avec contour noir.
L'image fait 384×192 pixels et Kikoodx l'inclut dans le code dans une version indexée, faisant appel à une palette de 256 couleurs optimisée pour cette image.
384×192=73728 à raison déjà d'1 octet par pixel, on peut de suite renoncer à faire tourner le script sur NumWorks : nous n'avons ni assez de stockage (32K) ni assez de tas / heap pour créer un tel objet mémoire à l'exécution (32K).
Exclue également la TI-83 Premium CE Edition Python. Son tas / heap Python est encore pire avec moins de 17.5K. Quant au stockage, précisons que malgré les apparences il ne suffirait même pas à cause de deux contraintes :
- si nous avons certes 3M de stockage en Flash, les scripts Python que l'on souhaite pouvoir exécuter doivent être mis en mémoire RAM - les ~150K peuvent certes être suffisants si la mémoire est assez vide...
- mais ça ne marchera pas pour autant, car à l'exécution les scripts doivent être transférés dans la mémoire de stockage dédiée du coprocesseur Python, et qui elle fait moins que ça...
Bref, il suffit de remplacer comme indiqué la seule ligne d'importation
from casioplot import *
par from ppn import *
, et ça marche directement sur TI-Nspire Ndless sans rien d'autre à modifier, aussi bien pour l'image que pour le texte décoré ! Précisons que d'origine, le Micropython pour TI-Nspire Ndless ne dispose pas de fonction pour dessiner du texte à l'écran. Et c'est justement l'objet du dernier ajout majeur à PolyPyNet.
Les 3 polices Casio Graph 90+E (petite, moyenne et large) ont été reproduites pixel par pixel, intégrées pour les scripts exécutés sur TI-Nspire Ndless et tkinter, et visiblement avec succès vu que l'on obtient bien le même effet visuel de contour sur le texte.
D'ailleurs tu noteras bien au passage que c'est la police (large) Casio que tu retrouves ici sur ta TI-Nspire au lieu de sa propre police, ainsi que sur tkinter.
Niveau temps d'exécution avant affichage de la photo, nous avons :
- 2.43s : Graph 90+E
- 4.90s : TI-Nspire CX CR3-
- 5.28s : TI-Nspire CX CR4+
Rappelons toutefois qu'avec la bibliothèque ti_graphics du Python de la TI-83 Premium CE Edition Python 5.5, Texas Instruments est justement en train de préparer des fonctions dédiées qui permettront d'afficher et même travailler sur des images, malgré les diverses contraintes matérielles, conformément aux programmes de SNT et NSI !
Téléchargements :
- afficheur d'image Python + PolyPyNet
- PolyPyNet (dernière version)
Crédits images : bande dessinée