Banque d'images Python TI-83 Premium CE 5.5 pour SNT
Posted: 12 May 2020, 20:56
Dans le cadre du concours de démo graphiques Python de Planète Casio, Kikoodx a développé un script d'affichage d'image pour Casio Graph 90+E.
Nous avons vu à cette occasion qu'il était hélas impossible de le faire fonctionner tel quel sur TI-83 Premium CE Edition Python.
L'image fait 384×192 pixels et Kikoodx l'inclut astucieusement dans le code dans une version indexée, faisant appel à une palette de 256 couleurs optimisée pour cette image.
Première contrainte, les scripts qui doivent être chargés occupent 196 Kio. Or si ta TI-83 Premium CE Edition Python dispose bien d'un espace de stockage pris sur la mémoire Flash de 3 Mio (dit mémoire d'archive) de capacité, l'application tout script y étant placé sera ignoré par l'application Python. Les scripts que tu souhaites pouvoir utiliser doivent obligatoirement être placés dans l'espace de stockage bien plus petit pris sur la mémoire RAM, avec dans les 150K disponibles à vide, ce n'est pas assez.
Mais l'image étant ici plus large que l'écran avec 384 pixels, on pourrait imaginer que ça rentre après l'avoir tronquée d'un petit quart de sa taille, du genre dans les 300×192 pixels ? Et ben non, même si tu arrives à réduire la taille des scripts à 150K tu n'es pas sorti(e) de l'auberge. Car nous venons de voir que le coprocesseur Python de ta machine ne peut importer simultanément qu'un maximum de 50K scripts.
C'est donc de trois quarts qu'il faudrait réduire notre image, elle ne serait plus du tout plein écran. Mais attend non même pas, puisque nous avions vu précédemment que le heap (tas) accueillant les valeurs des objets Python à l'exécution ne faisait plus que moins de 17.5K. 17.5K qui devraient donc accueillir à l'exécution non seulement l'objet image, mais également toutes les fonctions d'affichage liées.
Non décidément, la méthode d'inclure les données d'une image à afficher dans un script Python n'est pas envisageable sur TI-83 Premium CE Edition Python. A moins qu'il ne s'agisse que de toutes petites images du genre icônes, et très peu nombreuses.
Mais alors comment faire avec une classe équipée en TI-83 Premium CE Edition Python pour l'enseignement de SNT dès la Seconde, et notamment toute sa partie sur la photograhique numérique et le traitement d'image en Python ?
Nous avons vu à cette occasion qu'il était hélas impossible de le faire fonctionner tel quel sur TI-83 Premium CE Edition Python.
L'image fait 384×192 pixels et Kikoodx l'inclut astucieusement dans le code dans une version indexée, faisant appel à une palette de 256 couleurs optimisée pour cette image.
Première contrainte, les scripts qui doivent être chargés occupent 196 Kio. Or si ta TI-83 Premium CE Edition Python dispose bien d'un espace de stockage pris sur la mémoire Flash de 3 Mio (dit mémoire d'archive) de capacité, l'application tout script y étant placé sera ignoré par l'application Python. Les scripts que tu souhaites pouvoir utiliser doivent obligatoirement être placés dans l'espace de stockage bien plus petit pris sur la mémoire RAM, avec dans les 150K disponibles à vide, ce n'est pas assez.
Mais l'image étant ici plus large que l'écran avec 384 pixels, on pourrait imaginer que ça rentre après l'avoir tronquée d'un petit quart de sa taille, du genre dans les 300×192 pixels ? Et ben non, même si tu arrives à réduire la taille des scripts à 150K tu n'es pas sorti(e) de l'auberge. Car nous venons de voir que le coprocesseur Python de ta machine ne peut importer simultanément qu'un maximum de 50K scripts.
C'est donc de trois quarts qu'il faudrait réduire notre image, elle ne serait plus du tout plein écran. Mais attend non même pas, puisque nous avions vu précédemment que le heap (tas) accueillant les valeurs des objets Python à l'exécution ne faisait plus que moins de 17.5K. 17.5K qui devraient donc accueillir à l'exécution non seulement l'objet image, mais également toutes les fonctions d'affichage liées.
Non décidément, la méthode d'inclure les données d'une image à afficher dans un script Python n'est pas envisageable sur TI-83 Premium CE Edition Python. A moins qu'il ne s'agisse que de toutes petites images du genre icônes, et très peu nombreuses.
Mais alors comment faire avec une classe équipée en TI-83 Premium CE Edition Python pour l'enseignement de SNT dès la Seconde, et notamment toute sa partie sur la photograhique numérique et le traitement d'image en Python ?
Mais c'est que Texas Instruments a pensé à tout, et semble concevoir sa très prochaine mise à jour 5.5 sur-mesure pour le lycée français.
Dans notre exploration récente de la bibliothèque secrète ti_graphics, nous découvrions 3 fonctions dédiées aux images :
Nous n'en avons toutefois pas saisi tout le fonctionnement, puisque n'arrivant à afficher que du bruit mémoire.
Dans notre exploration récente de la bibliothèque secrète ti_graphics, nous découvrions 3 fonctions dédiées aux images :
pushImage(x, y, w, h)
popImage()
drawImage()
pushImage(x, y, w, h)
définit une image de dimensions w×h pixels qui sera ensuite affichée par popImage()
avec comme coin supérieur gauche le pixel de coordonnées (x,y).Nous n'en avons toutefois pas saisi tout le fonctionnement, puisque n'arrivant à afficher que du bruit mémoire.
Voici maintenant enfin les spécifications de la mystérieuse 3ème fonction d'image
L'appel
Exemple ci-contre de ce que l'on obtient avec l'appel ci-dessous après avoir chargé le fichier GIRL_150.8xv :
Cet affichage est ainsi effectué en dehors de l'environnement Python, il n'y a aucune création d'objet, aucune consommation de ressource !
Il n'en reste pas moins possible de poursuivre le traitement d'image en Python, avec des transformations répondant au programme de SNT de Seconde.
Une simple boucle de getPixel() / setPixel() te permettra par exemple ensuite de réaliser nombre de choses pertinentes en SNT, sans création de gros objets Python et donc sans problème d'épuisement du tas Python :
Quant aux images justement, il est prévu de nous mettre à disposition une banque d'images téléchargeables déjà préconverties au bon format compatible avec le Python de ta calculatrice.
Nous ignorons à ce jour si il sera possible de convertir ses propres images, ou si les fichiers au format en question seront protégés par une possible signature numérique.
Décidément Texas Instruments a le soucis méticuleux du détail, la moindre ligne des programmes scolaires étant prise en compte; nous n'en revenons toujours pas du travail colossal effectué sur cette mise à jour 5.5 !
drawImage('imgname', x, y)
.L'appel
drawImage('imgname', x, y)
va chercher dans les variables d'application de la calculatrice, c'est-à-dire en externe hors de l'environnement Python, une image correspondant au nom fourni, et l'affiche avec le pixel de coordonnées (x,y) comme coin supérieur gauche.Exemple ci-contre de ce que l'on obtient avec l'appel ci-dessous après avoir chargé le fichier GIRL_150.8xv :
ti_plotlib.gr.drawImage('GIRL_150', 100, 50)
Cet affichage est ainsi effectué en dehors de l'environnement Python, il n'y a aucune création d'objet, aucune consommation de ressource !
Il n'en reste pas moins possible de poursuivre le traitement d'image en Python, avec des transformations répondant au programme de SNT de Seconde.
Une simple boucle de getPixel() / setPixel() te permettra par exemple ensuite de réaliser nombre de choses pertinentes en SNT, sans création de gros objets Python et donc sans problème d'épuisement du tas Python :
- symétrie axiale
- symétrie centrale
- inversion de couleurs
- extraction de composantes de couleurs
- comparaison de divers algorithmes de conversion en niveaux de gris
- ...
Quant aux images justement, il est prévu de nous mettre à disposition une banque d'images téléchargeables déjà préconverties au bon format compatible avec le Python de ta calculatrice.
Nous ignorons à ce jour si il sera possible de convertir ses propres images, ou si les fichiers au format en question seront protégés par une possible signature numérique.
Décidément Texas Instruments a le soucis méticuleux du détail, la moindre ligne des programmes scolaires étant prise en compte; nous n'en revenons toujours pas du travail colossal effectué sur cette mise à jour 5.5 !