[SDK] GrayScreenshotLib - Générer un gif animé en grayscale
Posté le 13/05/2011 20:34
Suite à quelques demandes, je crée ce topic pour parler d'un vieux projet. Mon but était de pouvoir générer un gif animé d'un jeu en niveaux de gris.
Pour les captures d'écran de jeux, j'aime bien les gif animés, on voit bien plus le gameplay et la fluidité que sur une simple image fixe. Et puis ça attire l'oeil. Pour les jeux en noir et blanc, pas de soucis, j'utilise un logiciel de capture vidéo, avec l'émulateur de la calculatrice. Il suffit ensuite de convertir la vidéo en gif animé (beaucoup de soft proposent ça).
Mais pour les jeux en niveaux de gris, c'est une autre histoire. Les niveaux de gris sont, comme vous le savez, créés par un clignotement rapide de l'écran. Et grâce à la rémanence de l'écran, on obtient des nuances de gris plutôt stables. Sur l'émulateur par contre, on voit clairement le clignotement, car l'écran de l'ordinateur a une rémanence bien plus faible.
J'ai donc créé grayscreenshotlib.
Le projet se compose de 2 parties :
Une mini-librairie à intégrer dans son Addin, qui fait des captures d'écran et les stocke dans un fichier de la carte SD (pour une capture de quelques seconde le fichier est assez gros et ne tient pas sur la mémoire de stockage). A ce propos, si vous avez une calculatrice sans carte SD, vous pouvez tout à fait faire la capture d'écran avec l'émulateur du SDK.
Et un programme pour ordi, qui se charge de convertir le fichier de capture vidéo en un gif animé (grâce aux programmes de giflib). Ce programme, je ne l'ai écrit que pour Linux, mais il doit pouvoir être adapté pour Windows.
La partie calculatrice
Voici les sources de cette petite librairie :
grayscreenshotlib.c,
grayscreenshotlib.h
Petite documentation :
Au début de l'Addin, appelez gsl_init en lui donnant en paramètre le nombre de capture d'écran à prendre (sachant qu'elle prend à peu près 20 captures d'écran par seconde).
Ensuite, après chaque rafraîchissement de l'écran dans votre jeu, appelez gsl_screenshot en lui envoyant les adresses des 2 buffers servant d'écran.
Et enfin, à la fin du programme, appelez gsl_quit pour quitter proprement la librairie.
Ainsi on génère le fichier MOVIE.gsl contenant toutes les captures d'écran.
La partie ordinateur
Voici les sources de ce petit programme :
main.c
Il utilise les commandes rgb2gif et gifasm. Pour avoir ses commandes sous Linux, il faut installer le paquet giflib-tools.
Pour l'utiliser il suffit de placer le fichier MOVIE.gsl dans le même dossier, et d'exécuter le programme. Après un temps de traitement parfois long (si le nombre de captures d'écran est important), il génère un fichier result.gif
Exemple de résultat :
PS: Je signal tout de même qu'il existe aussi une petite librairie qui permet de prendre une capture d'écran simple (image fixe) d'un jeu en niveaux de gris, faite par Tratak :
Libscreenshot
Fichier joint
Citer : Posté le 05/08/2014 04:39 | #
Ce serait intéressant si ce lib était porté sur Casio fx-CG10 et fx-CG20 et qu'il soit fait pour qu'il fonctionne dans les programmes BASIC et LuaZM aussi. Présentement, il n'existe aucune solution gratuite pour créer des captures d'écrans animés de jeux Casio PRIZM et même la solution payante (fx-CG10/20 Manager Plus) n'est pas fiable pour les jeux en C et assembleur (trop lent ou plantage).
Le screen receiver de Casio est à oublier, car il cesse de capturer l'écran lorsqu'on lance un programme BASIC.
Sinon, pourquoi n'existe-t-il toujours pas d'émulateur communautaire pour la Graph 75/85/95 et fx-CG10/20 fonctionnant avec une ROM? Des émulateurs TI-84 Plus C Silver Edition gratuits sont sortis seulement un an après la calculatrice et fonctionnent à merveille.
Est-ce tout simplement impossible de dumper une ROM ou un boot code à partir d'une vraie calculatrice Casio comme on peut le faire avec les TI?
Citer : Posté le 05/08/2014 18:11 | #
Faire une lib pour la prizm (du moins pour les programmes en C) serait assez simple (grâce à la bmplib de Smash' notemment je pense), si tu veux je peux m'y pencher à mon retour de vacances; le soucis sera le temps d'écriture car une capture complète est assez lourde en 16bits :oops:.
Après pour les programmes en basic c'est plus compliqué car il faudrait passer par des timers, mais les timers empêchent le fonctionnement du système de fichiers... Enfin, c'est à réfléchir; et pour le Luazm, le plus simple serait d'avoir accès aux sources :).
Citer : Posté le 16/08/2014 18:31 | #
Sinon, pourquoi n'existe-t-il toujours pas d'émulateur communautaire pour la Graph 75/85/95 et fx-CG10/20 fonctionnant avec une ROM?
A vrai dire, je n'ai jamais vu de projets d'émulateurs Casio communautaires à ce jour et c'est bien dommage. Nous avons désormais de quoi compiler avec GCC. Il serait bon de pouvoir désormais débugger avec en utilisant un émulateur que l'on fournirait ensuite pour tout faire tourner.
Est-ce tout simplement impossible de dumper une ROM ou un boot code à partir d'une vraie calculatrice Casio comme on peut le faire avec les TI?
On a, si je me souviens, de quoi récupérer les OS des caltos. Certes, il nous faudrait aussi le bootloader mais il nous manque beaucoup d'experts en rétro-enginering à ce sujet qui veuille bien s'atteler à ce genre de projets. Ce n'est plus du "on décompile pour savoir ce que ça fait" mais c'est beaucoup plus compliqué que ceci. Pour avoir un émulateur parfait, il faut émuler parfaitement la machine, or on n'a finalement que peu d'infos sur le matos en lui-même... Je ne parle pas non plus des différents modèles qui réagissent différemment aux OS et addins (le ancien addin Mario marche mal sur G35+, son timer est carrément incorrect dû certainement aux modèles d'écran différents).
Il nous faudrait un vrai effort de la part des *pros* pour que l'on ait quelque chose de conséquent. Pour ma part (je ne me considère pas comme un pro, plus comme un procrastinateur), j'ai vu quelques pistes à voir, comme les sources de MAME qui contiennent de quoi émuler un paquet d'architectures de procos.
Je finis ce HS en rappelant que la Prizm aura beaucoup de mal à lire la VRAM de façon rapide (on a aucun accès à présent au MMU si il y en a un) et je ne pense pas que des screenshots animés soit possible sans avoir un framerate digne d'un examen de Code de la Route...