Posté le 18/05/2024 10:50
Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 238 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements
Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd
Citer : Posté le 18/05/2024 10:53 | #
Tu peux tenter une optimisation commune : tente-le en encodant chaque chiffre sur 7 segments. Tu peux trouver les détails sur Internet
Mon blog ⋅ Mes autres projets
Citer : Posté le 18/05/2024 11:58 | #
J'aime bien le style ! Tu peux faire un chouille plus compact avec le format d'images.
img_digits = image(0, 40, 5, b'\xf1\xff\x9f\xff\xff\x00\x00\x00\x91\x11\x98\x89\x99\x00\x00\x00\x91\xf7\xff\xf1\xff\x00\x00\x00\x91\x81\x11\x91\x91\x00\x00\x00\xf1\xff\x1f\xf1\xff\x00\x00\x00')
dclear(0)
for n in range(10):
dsubimage(n*8, 0, img_digits, 4*n, 0, 4, 5)
dupdate()
getkey()
Avec --py-compact on gagne encore 120 octets (mais je l'ai pas fait parce que le texte se copie pas bien).
Citer : Posté le 18/05/2024 12:19 | #
Tu peux tenter une optimisation commune : tente-le en encodant chaque chiffre sur 7 segments. Tu peux trouver les détails sur Internet
merci de tes suggestions je regarderai à l'occasion
J'aime bien le style ! Tu peux faire un chouille plus compact avec le format d'images.
Avec --py-compact on gagne encore 120 octets (mais je l'ai pas fait parce que le texte se copie pas bien).
Merci d'avoir pris le temps de regarder et d'expliquer d'autres méthodes
j'ai essayé ton code mais j'ai le message name "image" isn't defined.
--py-compact je ne connais pas. c'est un outil de Planer Casio ?
https://joz.alwaysdata.net/info/
Citer : Posté le 18/05/2024 12:24 | #
Les images ont été ajoutées dans la dernière version publiée mi-Mars.
La conversion de format est pour l'instant proposée par fxconv (un outil du fxSDK) et --py-compact est une option de fxconv qui produit un code compact pour charger l'image. L'inconvénient est que le code en question n'est pas affichable en texte traditionnel, donc il faut le mettre dans un autre .py auquel on ne touche pas. L'avantage c'est que ça prend moins de place et de mémoire.
Tu peux avoir plus de détails sur les images dans la documentation.
Citer : Posté le 18/05/2024 15:15 | #
merci de tes renseignements. dans mon émulateur j'avais une ancienne version de PE et maintenant ça fonctionne.
C'est vrai que le script passe de 692 à 309 bytes ce qui est remarquable !
j'ai récupéré l'image de la doc et dans un terminal quand j'essaie de la convertir ça ne fonctionne pas.
mais j'ai sans doute des trucs bancales sur mon ordi
de plus je ne sais pas récupérer une image depuis le code sans passer par une copie d'écran.
Edit je n'avais pas la bonne image mais ça ne change rien quand je télécharge https://git.planet-casio.com/Lephenixnoir/PythonExtra/raw/branch/main/ports/sh/examples/fx_image_7seg.png
https://joz.alwaysdata.net/info/
Citer : Posté le 18/05/2024 15:32 | #
Ah j'ai laissé le support de PythonExtra dans fxconv sur la branche dev du SDK... si tu as installé avec GiteaPC tu peux juste taper giteapc install Lephenixnoir/fxsdk@dev et ça devrait te donner la bonne version.
Oui le code est assez compact avec ça ce qui devient important pour faire des programmes ou jeux qui ne deviennent pas immenses quand on rajoute beaucoup d'images
Citer : Posté le 18/05/2024 15:57 | #
j'ai fait la mise _à jour : 7seg.py généré (sans --py-compact pour l'instant)
seg = gint.image(0, 79, 12, b'|\x00||\x00|||||\x00\x00\xba\x02::\x82\xb8\xb8:\xba\xba\x00\x00\xc6\x06\x06\x06\xc6\xc0\xc0\x06\xc6\xc6\x00\x00\xc6\x06\x06\x06\xc6\xc0\xc0\x06\xc6\xc6\x00\x00\x82\x02\x02\x02\x82\x80\x80\x02\x82\x82\x00\x00\x00\x00|||||\x00||\x00\x00\x82\x02\xb8:::\xba\x02\xba:\x00\x00\xc6\x06\xc0\x06\x06\x06\xc6\x06\xc6\x06\x00\x00\xc6\x06\xc0\x06\x06\x06\xc6\x06\xc6\x06\x00\x00\xc6\x06\xc0\x06\x06\x06\xc6\x06\xc6\x06\x00\x00\xba\x02\xb8:\x02:\xba\x02\xba:\x00\x00|\x00||\x00||\x00||\x00\x00')
Edit 1 à l'affichage :
NB j'avais une syntaxe erreur car mon fichier pour afficher commençait par un chiffre 7seg2.py et j'ai mis seg2.py
https://joz.alwaysdata.net/info/
Citer : Posté le 18/05/2024 17:01 | #
J'aime bien le style ! Tu peux faire un chouille plus compact avec le format d'images.
img_digits = image(0, 40, 5, b'\xf1\xff\x9f\xff\xff\x00\x00\x00\x91\x11\x98\x89\x99\x00\x00\x00\x91\xf7\xff\xf1\xff\x00\x00\x00\x91\x81\x11\x91\x91\x00\x00\x00\xf1\xff\x1f\xf1\xff\x00\x00\x00')
dclear(0)
for n in range(10):
dsubimage(n*8, 0, img_digits, 4*n, 0, 4, 5)
dupdate()
getkey()
Avec --py-compact on gagne encore 120 octets (mais je l'ai pas fait parce que le texte se copie pas bien).
je n'ai pas compris comment tu procèdes pour compacter le code sans passer par une image....
https://joz.alwaysdata.net/info/
Citer : Posté le 18/05/2024 17:11 | #
Les données de l'image sont fournies à travers un objet de type bytes écrit sous la forme b'...'. Les contenus sont donnés en syntaxe "chaîne de caractères" entre les apostrophes. Par exemple, dans 7seg.py, tu peux voir un certain nombre de "|" dans les données, ce qui représente un octet de valeur 0x7c = 124. Le caractère prend un octet dans le fichier .py, et il représente un octet de données, ce qui est parfait (c'est compact).
Malheureusement, la syntaxe chaîne de caractères ne permet normalement de saisir que les caractères imprimables. Donc par exemple si on a besoin d'un octet de valeur 0xff = 255, il n'y a pas de caractère associé qu'on peut écrire. Du coup, à la place on utilise une séquence d'échappement et on écrit "\xff". Ça marche, mais ça prend 4 octets dans le fichier .py pour représenter un octet de données, ce qui est bof.
Il se trouve que MicroPython est assez permissif et nous autorise à écrire un octet de valeur 255 directement dans le b'...'. Avec --py-compact, si un octet de données de valeur 255 apparaît fxconv génère un fichier qui contiendra cet octet directement au lieu de "\xff". Mais il n'y a toujours pas de caractère associé, donc si tu essaies d'afficher ce fichier dans un éditeur de texte ou dans un terminal tu obtiens des résultats plus ou moins bizarres (caractères invisibles, ignorés, points d'interrogation, etc).
TL;DR : Dans le code que tu as plus haut y'a plein de \x** qui sont inefficaces et --py-compact en supprime la majorité au prix d'utiliser des caractères non imprimables à la place.
Citer : Posté le 22/05/2024 21:01 | #
Merci Lephe pour toutes tes explications
j'ai fait des essais avec dimage() et dsubimage()
C'est très instructif (en fait je n'avais jamais "travaillé" avec les images ... )
Quand on charge des images avec des import ça prend de la place en mémoire et est-ce qu'il à un moyen de libérer la place occupée dès qu'on n'a plus besoin de traiter une image ?
Autre question vaut-il mieux charger des grosses images et afficher les parties que l'on à besoin avec des dsubimage() ou charger plusieurs petites images ?
merci de vos conseils
https://joz.alwaysdata.net/info/
Citer : Posté le 04/06/2024 09:27 | #
un peu rien à voir avec le sujet . je me suis amusé a afficher les caracteres ASCII disponibles dans PE avec dtext() et j'ai été surpris de découvrir en dessous de chr(32) d'autres symboles. c'est sans doute déjà dit quelque part mais ça permet de faire un rappel.
un peu de code à l'arrache...
dclear(C_WHITE)
x,y=0,0
for i in range(257):
dtext(x,y,C_BLACK,chr(i))
if x==120:
x=0
y+=8
else:
x+=8
dupdate()
getkey()
et voila ce que ça donne :
https://joz.alwaysdata.net/info/
Citer : Posté le 04/06/2024 09:37 | #
Hm, je suis pas sûr de la table de caractères en jeu ici. C'est du custom PE/gint @Lephenixnoir ?
Mon blog ⋅ Mes autres projets
Citer : Posté le 04/06/2024 09:39 | #
oui c'est en PythonExtra (abrégé par PE dans mon ticket ...)
https://joz.alwaysdata.net/info/
Citer : Posté le 04/06/2024 10:25 | #
C'est un vieil arrangement de caractères dans la police par défaut de gint... plus ou au moins au hasard, j'ai mis au petit bonheur la chance pour m'en servir dans gintctl. La vraie "bonne" façon de faire est d'utiliser une police Unicode comme uf5x7. Je devrais peut-être virer cette partie d'ailleurs...
Citer : Posté le 04/06/2024 10:27 | #
Quand on charge des images avec des import ça prend de la place en mémoire et est-ce qu'il à un moyen de libérer la place occupée dès qu'on n'a plus besoin de traiter une image ?
La variable d'image elle-même tu peux la del. Par contre le module importé c'est plus dur. Un jour je fournirai une fonction pour charger directement depuis un fichier d'assets et y'aura plus le coût du module en plus.
Autre question vaut-il mieux charger des grosses images et afficher les parties que l'on à besoin avec des dsubimage() ou charger plusieurs petites images ?
Dans l'ensemble mieux vaut charger des "grosses" images. Sur mono gint force les images à faire un multiple de 32 pixels de large. Donc si t'as une image de 5x5 et une image de 32x5 elles prennent la même place. Donc vaut mieux profiter des multiples de 32.
À part ça y'a pas trop de différence.
Citer : Posté le 04/06/2024 18:07 | #
merci Lephe pour tes explications
je me suis un peu amusé mais à déplacer un objet (je n'ai pas pris le soin, pour l'instant de prendre une autre image pour les directions)
mini video ps je ne sais pas quel format prendre pour que la video soit reconnue sur le forum.
penses tu que on peut faire un "jeu" suffisamment jouable en python extra ?
pour info j'ai repris ton image de spritesheet.png et transformé le canal alpha en blanc et passé la commande fxconv que tu m'avais expliquée.
edit video suite réponse de Lephe
https://joz.alwaysdata.net/info/
Citer : Posté le 04/06/2024 18:28 | #
Pour la vidéo il suffit de mettre le lien direct : [video=320]https://i.imgur.com/S4AkMh8.mp4[/video]
On peut carrément faire un jeu jouable oui, puisqu'on peut déjà faire des petits trucs avec le Python intégré y'a aucun doute qu'on peut avec PythonExtra
Citer : Posté le 04/06/2024 18:41 | #
d'accord merci j'ai modifié le post précédent.
oui avec getkey et time ça ouvre des possibilités. après faut s'investir pour faire un truc sympa
concernant le del dont tu m'a parlé précédemment quelle est la syntaxe ? del(image) ?
https://joz.alwaysdata.net/info/
Citer : Posté le 04/06/2024 19:00 | #
Oui ou juste del image c'est un statement à part entière.