MSX Village forum

La Place des Développeurs MSXImage Un outil pour créer des tables de sprites

aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2694

Le 11/11/2020 à 23h16
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) :
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.
Github    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5481

Le 12/11/2020 à 10h48
Pas tout compris comment ca marche à lire la doc :p
A essayer...
En tout cas merci ! ;)


banniere-ericb59e
Site web    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2694

Le 12/11/2020 à 22h35
J'ai écrit une doc complète sur le wiki : MSXImage.
Il y a notamment l'explication des différents algorithmes de compression sans perte.


On est toujours ignorant avant de savoir.
Github    
TurboSEB Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 08/08/2010 à 20h57

Messages: 5788

Le 12/11/2020 à 22h52
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é. :tea
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 :tea



MSX 1&2 + Moniteurs+divers (environ 0.70Tonnes)
   
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2694

Le 13/11/2020 à 21h17
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. :D


On est toujours ignorant avant de savoir.
Github    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2694

Le 21/11/2020 à 18h55
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


On est toujours ignorant avant de savoir.
Github    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2694

Le 22/12/2020 à 01h10
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) .


On est toujours ignorant avant de savoir.
Github    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5481

Le 22/12/2020 à 14h12
Cool...
Vas falloir que je compile ça pour MacOS pour me faire une idée... :)


banniere-ericb59e
Site web    
Gfx Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 22/02/2021 à 22h22

Messages: 355

Le 02/03/2021 à 22h43
Génial ton outils, le format généré me fait penser au XPM.


Il faut cultiver notre jardin.
   
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2694

Le 05/06/2021 à 00h09
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.

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.
Github    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5481

Le 05/06/2021 à 14h19
TOP ! ;)


banniere-ericb59e
Site web    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2694

Le 05/06/2021 à 18h54
Ca corrige le problème de SDCC qui ne permet pas (encore) d'empiler des données à partir d'une adresse donnée.


On est toujours ignorant avant de savoir.
Github    
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie