La Place des Développeurs MSXImage Un outil pour créer des tables de sprites
aoineko
Membre non connecté
Conseiller Municipal
Salut,
Encore un outil que j'avais développé pour la programmation MSX et que je viens de mettre à jour : MSXImage.
L'outil prend une image en entrée (à peu près n'importe quel format) et il va en extraire des sprites et les formater pour qu'ils puissent être inclus dans un programme MSX (C ou ASM) ou directement dans un binaire.
J'ai développé des algorithmes de compression sans perte pour que les données prennent le moins de place possible (surtout pour les ROMs).
La version 1.6.3 est disponible sur le village et les sources sont sur GitHub (https://github.com/aoineko-fr/MSXImage).
Voici la doc complète en anglais (si ça vous intéresse, je peux la traduire en gaulois) :
Encore un outil que j'avais développé pour la programmation MSX et que je viens de mettre à jour : MSXImage.
L'outil prend une image en entrée (à peu près n'importe quel format) et il va en extraire des sprites et les formater pour qu'ils puissent être inclus dans un programme MSX (C ou ASM) ou directement dans un binaire.
J'ai développé des algorithmes de compression sans perte pour que les données prennent le moins de place possible (surtout pour les ROMs).
La version 1.6.3 est disponible sur le village et les sources sont sur GitHub (https://github.com/aoineko-fr/MSXImage).
Voici la doc complète en anglais (si ça vous intéresse, je peux la traduire en gaulois) :
Code TEXT :
_____ _____________ ___ .___ / \ / _____/\ \/ / | | _____ _____ ____ ____ / \ / \ \_____ \ \ / | |/ \\__ \ / ___\_/ __ \ / Y \/ \ / \ | | Y Y \/ __ \_/ /_/ > ___/ \____|__ /_______ //___/\ \ |___|__|_| (____ /\___ / \___ > \/ \/ \_/ \/ \//_____/ \/ by Guillaume "Aoineko" Blanchard (aoineko@free.fr) under CC-BY-AS license (https://creativecommons.org/licenses/by-sa/2.0/) Usage: MSXImage [options] Options: -in fileName Inuput file name. Can be 8/16/24/32 bits image Supported format: BMP, JPEG, PCX, PNG, TGA, PSD, GIF, etc. -out fileName Output file name -format ? Output format auto Auto-detected using output file extension (default) c C header file output asm Assembler header file output bin Raw binary data image -name name Name of the table to generate -pos x y Start position in the input image -size x y Width/height of a block to export (if 0, use image size) -num x y Number of block to export (columns/rows number) -trans color Transparency color (in RGB 24 bits format : 0xFFFFFF) -bpc ? Number of bits per color for the output image (support 1, 4 and 8-bits) 1 1-bit black & white (0: tranparency or black, 1: other colors) 4 4-bits index in 16 colors palette 8 8 bits RGB 256 colors (format: [G:3|R:3|B2]; default) -pal Palette to use for 16 colors mode msx1 Use default MSX1 palette custom Generate a custom palette and add it to the output file -palcount n Number of color in the custom palette to create (default: 15) -compress ? none No compression (default) crop16 Crop image to non transparent area (4-bits, max size 16x16) cropline16 Crop image to non transparent area (4-bits per line, max size 16x16) crop32 Crop image to non transparent area (5-bits, max size 32x32) cropline32 Crop image to non transparent area (5-bits per line, max size 32x32) crop256 Crop image to non transparent area (8-bits, max size 256x256) cropline256 Crop image to non transparent area (8-bits per line, max size 256x256) rle0 Run-length encoding of transparent blocs (7-bits for block length) rle4 Run-length encoding for all colors (4-bits for block length) rle8 Run-length encoding for all colors (8-bits for block length) -dither ? Dithering method (for 1-bit color only) none No dithering (default) floyd Floyd & Steinberg error diffusion algorithm bayer4 Bayer ordered dispersed dot dithering(order 2 – 4x4 - dithering matrix) bayer8 Bayer ordered dispersed dot dithering(order 3 – 8x8 - dithering matrix) bayer16 Bayer ordered dispersed dot dithering(order 4 – 16x16 dithering matrix) cluster6 Ordered clustered dot dithering(order 3 - 6x6 matrix) cluster8 Ordered clustered dot dithering(order 4 - 8x8 matrix) cluster16 Ordered clustered dot dithering(order 8 - 16x16 matrix) -data ? Text format for numbers dec Decimal data (c & asm) hexa Default hexadecimal data (depend on langage; default) hexa0x Hexadecimal data (0xFF; c & asm) hexaH Hexadecimal data (0FFh; asm only) hexa$ Hexadecimal data ($FF; asm only) hexa# Hexadecimal data (#FF; asm only) bin Binary data (11001100b; asm only) -skip Skip empty sprites (default: false) -help Display this help Example: > MSXImage -in cars.png -out test_4_rle0.h -pos 0 0 -size 13 11 -num 16 4 -name g_Cars -trans 0xE300E3 -bpc 4 -pal custom -compress rle0 Load "cars.png" file and export 16x4 blocks of 13x11 pixels from upper-left corner of the image (0x0) in 4-bits index (16 colors) using a custom palette of 15 colors. Table name is "g_Cars" and RLE-transparency method is use for loose-less compression.
On est toujours ignorant avant de savoir.
aoineko
Membre non connecté
Conseiller Municipal
TurboSEB
Membre non connecté
Conseiller Municipal
Impressionnant : Même si je ne maîtrise rien vue mon niveau, je vois ici de nombreuses possibilité de stockage de datas images, fonts et autres sprites, (pourquoi pas de la musique, en datas) directement dans une flashrom par exemple, ce qui permettrait aussi d'utiliser efficacement un RAMDisc ou du moins la RAM disponible au dela des 64ko ,tout en économisant la VRAM dont la page 1 servirait d'ecriture a la volé.
Je comprend désormais mieux la façon de procédé de certains programmes en Basic contenant surtout des Datas en codes machine et pourtant riche en images et en sprites sans pour autant de fichiers *. SCx
Je comprend désormais mieux la façon de procédé de certains programmes en Basic contenant surtout des Datas en codes machine et pourtant riche en images et en sprites sans pour autant de fichiers *. SCx
MSX 1&2 + Moniteurs+divers (environ 0.70Tonnes)
aoineko
Membre non connecté
Conseiller Municipal
Pour le moment, les 3 projets que j'ai commencé sur MSX sont des jeux en Screen 8 sur des cartouches 64K... autant dire que la problématique de stockage est TRES importante.
On est toujours ignorant avant de savoir.
aoineko
Membre non connecté
Conseiller Municipal
Nouvelle version de mon tool d'export/compression de sprites : MSXImage 1.7
J'ai ajouté 2 nouvelles possibilités pour la compression : "auto" et "best".
En "auto", le programme essaye sélectionne un mode de compression standard en fonction des paramètres d'entrée (en fonction de la taille des sprites et de mode couleur 1/4/8-bits).
En "best", le programme génère les données dans tous les modes de compression possibles, puis sélectionne le meilleur (celui qui génère les données les plus petites).
J'ai aussi ajouté une option "-head" pour inclure un entête dans les données avec les informations nécessaires à la décompression.
J'ai mis-à-jour la page d'explication sur le wiki : http://msxvillage.fr/wiki/wiki.php?title=msximage
J'ai ajouté 2 nouvelles possibilités pour la compression : "auto" et "best".
En "auto", le programme essaye sélectionne un mode de compression standard en fonction des paramètres d'entrée (en fonction de la taille des sprites et de mode couleur 1/4/8-bits).
En "best", le programme génère les données dans tous les modes de compression possibles, puis sélectionne le meilleur (celui qui génère les données les plus petites).
J'ai aussi ajouté une option "-head" pour inclure un entête dans les données avec les informations nécessaires à la décompression.
J'ai mis-à-jour la page d'explication sur le wiki : http://msxvillage.fr/wiki/wiki.php?title=msximage
On est toujours ignorant avant de savoir.
aoineko
Membre non connecté
Conseiller Municipal
Nouvelle version : MSXImage_1_7_4.zip
J'ai ajouté :
- La possibilité de préciser un espacement entre les sprites à exporter ( -gap x y ).
- La possibilité d'exporter une table d'index donnant l'offset de chaque sprite dans les datas ( -idx ). Utile pour les sprites compressés qu'on manipule en RAM.
- La possibilité de générer un entête de description pour les fonts ( -font x y f l ). Les paramètres sont (dans l'ordre) : largeur d'un caractère, sa hauteur, code ASCII du 1re caractère, celui du dernier.
- La possibilité d'ajouter un code permettant de redéfinir les propriétés de la structure de donnée en C ( -def ). Ca permet par exemple de pouvoir placer le tableau de donnée à une adresse précise dans le Binaire via __at(0x1234) .
J'ai ajouté :
- La possibilité de préciser un espacement entre les sprites à exporter ( -gap x y ).
- La possibilité d'exporter une table d'index donnant l'offset de chaque sprite dans les datas ( -idx ). Utile pour les sprites compressés qu'on manipule en RAM.
- La possibilité de générer un entête de description pour les fonts ( -font x y f l ). Les paramètres sont (dans l'ordre) : largeur d'un caractère, sa hauteur, code ASCII du 1re caractère, celui du dernier.
- La possibilité d'ajouter un code permettant de redéfinir les propriétés de la structure de donnée en C ( -def ). Ca permet par exemple de pouvoir placer le tableau de donnée à une adresse précise dans le Binaire via __at(0x1234) .
On est toujours ignorant avant de savoir.
aoineko
Membre non connecté
Conseiller Municipal
J'ai mis à jour tous mes outils MSX, notamment pour permettre de créer des tables en C qui s'empilent à partir d'une adresse mémoire donnée (nécessaire pour les ROM 48K et 64K).
Je les ais renommé pour aller avec ma librairie C : CMSX.
Voici les mises à jour.
Outil de conversion d'images (https://github.com/aoineko-fr/CMSXimg)
- Ajout de la possibilité de générer plusieurs calques de sprite à partir d'une image en plusieurs couleurs (on peut aussi utiliser l'option pour créer de nouvelles couleurs via le flickering).
- Ajout d'un nouveau algorithme de compression - RLEp - basé sur la répétition des patterns (très rapide et assez efficace pour compresser les patterns de sprites/tuiles).
- Ajout d'une option pour choisir l'adresse de début des tables en C (via la directive __at(xxxx) ).
- Ajout d'une option pour choisir un offset sur les numéros de tiles générés (pour le Screen 2/4) ou les fonts (screen 0~4).
Outil de conversion de fichier binaire en tableau C ou assembleur (https://github.com/aoineko-fr/CMSXbin)
- Ajout d'une option pour extraire les informations des entêtes de fichier .PT3
- Ajout d'une option pour choisir l'adresse de début des tables en C (via la directive __at(xxxx) ).
Outil de génération de tableau arithmétique précalculé (https://github.com/aoineko-fr/CMSXmath)
- Ajout d'une option pour choisir l'adresse de début des tables en C (via la directive __at(xxxx) ).
Si vous voulez plus d'explication sur ces outils, hésitez pas à demander.
Je vais essayer de mettre quelques exemples sur GitHub.
Je les ais renommé pour aller avec ma librairie C : CMSX.
Voici les mises à jour.
CMSXimg 1.12.0
Outil de conversion d'images (https://github.com/aoineko-fr/CMSXimg)
- Ajout de la possibilité de générer plusieurs calques de sprite à partir d'une image en plusieurs couleurs (on peut aussi utiliser l'option pour créer de nouvelles couleurs via le flickering).
- Ajout d'un nouveau algorithme de compression - RLEp - basé sur la répétition des patterns (très rapide et assez efficace pour compresser les patterns de sprites/tuiles).
- Ajout d'une option pour choisir l'adresse de début des tables en C (via la directive __at(xxxx) ).
- Ajout d'une option pour choisir un offset sur les numéros de tiles générés (pour le Screen 2/4) ou les fonts (screen 0~4).
CMSXbin 1.2.0
Outil de conversion de fichier binaire en tableau C ou assembleur (https://github.com/aoineko-fr/CMSXbin)
- Ajout d'une option pour extraire les informations des entêtes de fichier .PT3
- Ajout d'une option pour choisir l'adresse de début des tables en C (via la directive __at(xxxx) ).
CMSXmath 1.5.2
Outil de génération de tableau arithmétique précalculé (https://github.com/aoineko-fr/CMSXmath)
- Ajout d'une option pour choisir l'adresse de début des tables en C (via la directive __at(xxxx) ).
Si vous voulez plus d'explication sur ces outils, hésitez pas à demander.
Je vais essayer de mettre quelques exemples sur GitHub.
On est toujours ignorant avant de savoir.
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie