[Tutoriel] Utiliser le Sprite Optimizer
Posté le 19/08/2018 16:39
Ce topic a pour but d'être à la fois la doc et la page de discussion de l'outil.
Ce document peut ne pas être à jour. La référence officielle est le dépôt GitLab
Qu'est-ce que c'est ?
Le
Sprite Optimizer est un outil permettant de générer le code Multi DrawStat optimisé d'une image. Une fois le programme exécuté, il n'y a plus qu'à copier-coller la sortie dans votre éditeur de programme (
BIDE par exemple).
Attention, le programme retourne une solution optimisée, qui peut ne pas être la solution optimale.
En pratique, la solution proposée est souvent très correcte. Si vous pensez pouvoir faire mieux,
n'hésitez pas !
L'outil est librement diffusé sous licence CeCILL 2.1.
Comment l'utiliser ?
Commencez par installer les dépendances puis récupérez l'outil depuis
le dépôt de code.
– Python 3 (n'oubliez pas de cocher l'option « ajouter Python et pip au chemin » sous Windows)
– argparse :
pip install argparse
– bresenham :
pip install bresenham
– pillow :
pip install pillow
Ensuite, le fonctionnement est le suivant (pour Windows, une manip plus simple
est dispo) :
# Affiche le code uniquement
python3 sprite-optimizer image.png
# Affiche la progression, des infos (lignes, temps d'exécution), et le code
python3 sprite-optimizer -pi image.png
# Retourne le code de l'image pour un ViewWindow inversé (origine en bas à gauche)
python3 sprite-optimizer --flip image.png
# Retourne le code avec un offset de (10, 5)
python3 sprite-optmizer --offset 10 5 image.png
# Affiche l'aide intégrée
python3 sprite-optimizer -h
Le programme possède un shebang pour une exécution plus simple sous Linux :
./sprite-optimizer
Par défaut, l'origine des coordonnées
(0, 0) est en haut à gauche. Cela correspond à un
ViewWindow 0, 126, 0, 62, 0, 0. Pour inverser le ViewWindow utilisez l'option
--flip (ou
-f). Pour le décaler, utilisez l'option
--offset (ou
-o).
Options disponibles
usage: sprite-optimizer.py [-h] [-d] [-f] [-i] [-o OFFSET OFFSET] [-p] [-s]
path
Generate the Multi DrawStat code for an image.
positional arguments:
path path of the image to process
optional arguments:
-h, --help show this help message and exit
-d, --draw draw the result into a new file
-f, --flip flip image vertically (for inverted ViewWindow)
-i, --info print informative stats
-o OFFSET OFFSET, --offset OFFSET OFFSET
offset for viewwindow. Default: (0, 0)
-p, --progress print progress info
-s, --show show the result
Exemple de sortie
sprite.png processed in 71 lines (0.622s)
Graph(X,Y)=({16+14T, 7, 11, 5, 17+6T, 14+8T, T, 31, 20-6T, 8+2T, 11+10T, 26-T, 6+6T, 17-6T, 9+T, 7-7T, 27-9T, 29-5T, 4, 4+8T, 26+4T, 2T, 16+5T, 18-T, 28+3T, 23-3T, 13+3T, 11-3T, 6+4T, 7+5T, 15-5T, 22+2T, 22, 16+2T, 12+T, 14-T, 15-2T, 5+T, 2T, 1+T, 29-3T, 25+4T, 21+4T, 19+4T, 25-2T, 6+T, 26-5T, 8+T, 11+T, 25+T, 14+2T, 16-2T, 15-2T, 11+2T, 2T, 2T, 22+3T, 4-3T, 26-4T, 14-4T, 19-2T, 20-7T, 30, 29, 24, 21, 19, 17, 14, 14, 1}, {26-T, 21-11T, 21-10T, 20-9T, 24-8T, 2+T, 11+8T, 11+7T, 15+7T, 14+7T, 25+2T, 13-6T, 23, 11-6T, 11+6T, 6+5T, 27-2T, 21, 15+5T, 22-3T, 7+3T, 28-4T, 28-6T, 13+6T, 25-8T, 14+3T, 13+2T, 8, 10, 6, 24+2T, 20-T, 11-2T, 5+2T, 30-2T, 20+2T, 12+2T, 28-2T, 26+2T, 11+2T, 18+3T, 26-4T, 17-2T, 22+4T, 8-4T, 16+5T, 28-6T, 14+7T, 12+8T, 21-2T, 16-T, 5, 12, 8+2T, 15, 13-T, 27-3T, 22-3T, 14+3T, 2+4T, 17-6T, 25+T, 26, 20, 29, 29, 7, 29, 28, 19, 29})
Pour toute demande d'aide, suggestion ou remarque, vous pouvez commenter ce topic
Fichier joint
Citer : Posté le 19/02/2022 18:06 | #
https://www.planet-casio.com/Fr/forums/topic15315-2-tutoriel-utiliser-le-sprite-optimizer.html#165850
L'algo de Lephenix a été merge dans le dépôt git non ? Pas besoin d'aller récup le script qu'il donne en pièce jointe après ?
Et au passage c'est optimisé au niveau de la vitesse de dessin. En utilisant ce qu'on appelle un le Super DrawStat
Yes mais pas forcément au niveau de la taille en octets du coup ?
Citer : Posté le 19/02/2022 18:12 | #
En effet j'avais pas vu le dépôt. Après ça dépend de la taille de ton image, tu peux comparer avec l'image de 44*60 de Sentaro21 qui a pris environ 7 minutes à être calculée
Niveau octets je ne sais pas trop, vu que l'outil génère des lignes pour optimiser le dessin ça doit être relativement opti au niveau du poids. Il y a certainement moyen de trouver mieux cependant
(Et de toute façon, vous pouvez pas dire le contraire)
MultipliCasio
RDM Calculs
Back Mirror
A Switch To The Top C
Citer : Posté le 19/02/2022 18:18 | #
Ça marche merci. J'ai utilisé une image de 127 par 63 (résolution d'une casio) mais avec peu de points, c'est peut-être pour ça que ça rame ? J'ai testé avec son image et l'exécution semblait prendre beaucoup de temps également :/
Citer : Posté le 19/02/2022 18:36 | #
Ma version a bien été mergée sur le dépôt. Elle n'optimise que la vitesse d'exécution et ne change pas le résultat (à part peut-être le non-déterminisme des ensembles Python). L'image d'exemple dans mon post original était upscale x2 ce qui change massivement le temps de calcul.
Citer : Posté le 19/02/2022 18:38 | #
* Avec l'image de Dark storm je voulais dire
Citer : Posté le 08/07/2022 10:37 | #
Verifie bien le nombre de pixel, ya deux trois images upscale par 10 sur le forum
Citer : Posté le 01/06/2023 16:07 | #
Salut ! Je viens de lire en travers la description et je vois que le prog est destiné à être utilisé avec un ViewWindow de 0,126,0,0,62,0,1,1,1. Est-il possible de le faire avec un ViewWindow de 1,127,0,1,63,0,1,1,1 (c'est ce que j'utilise dans tout mon prog) ?
P.S : Le lien dépot du code est mort
Citer : Posté le 01/06/2023 16:10 | #
Oui, c'est possible. https://gitea.planet-casio.com/Darks/sprite-optimizer#d%C3%A9calage-du-viewwindow
Dans ton cas tu dois ajouter l'option --offset 1,1 lors de la conversion.