CMSXImg
Table des matières
Version actuelle : MSXImage 1.6.3
Exemple
Prenons l'image suivante :
Elle est constitué de 4 rangées (une par voiture) de 16 sprites d'une taille de 13x11 pixels.
Imaginons qu'on souhaite extraire les 16 sprites de la 2e voiture (la jaune) vers un fichier my_sprites.h pour être intégré dans un programme C.
Cela permet d'avoir les images directement intégré au programme sans avoir à les charger à la main (très utile pour les programme destiné aux ROMs).
Nous utiliserons la commande :
> MSXImage -in my_image.png -out my_sprites.h -pos 0 11 -size 13 11 -num 16 1 -name myYellowCar -trans 0xE300E3 -bpc 8
-pos 0 11 : donne la position de départ de la zone à extraire dans l'image source.
-size 13 11 : donne la taille des blocks à extraire.
-num 16 1 : donne le nombre de blocks à extraire.
-name myYellowCar : donne le nom de la structure à créer (dans le cas d'un fichier texte).
-trans 0xE300E3 : donne la couleur de fond qui va permettre de déterminer les zones transparentes.
-bpc 8 : détermine le nombre de couleur des sprites. Ici, on utilise le mode 8-bits du Screen 8 et ses 256 couleurs.
Dans ce cas, l'outil va générer un fichier texte qu'on va pouvoir ensuite inclure dans un programme C qui va ressembler à ça :
Code C :
// Data table const unsigned char myYellowCar[] = { // Sprite[0] (offset:0) 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x10, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x49, 0x04, 0x21, 0x04, 0xFB, 0x21, 0x21, 0x91, 0x92, 0xBC, 0x6D, 0x00, ... };
Options
Code TEXT :
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 -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) -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) -skip Skip empty sprites (default: false) -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) -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) -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) -help Display this help
Déscription
Fichier source
-in path\fileName
Le chemin et le nom du fichier source d'où les images vont être extraites.
MSXImage utilise la libraire FreeImage et supporte donc de très nombreux formats d'image (BMP, JPEG, PCX, PNG, TGA, PSD, GIF, etc.) et de nombreux format de couleur (8, 16, 24 ou 32-bits).
Fichier destination
-out path\fileName
Le chemin et le nom du fichier de destination.
Si le paramètre format (voir si dessous) est mode automatique ( -format auto ), c'est l'extension du fichier de destination qui déterminera le format des données à exporter.
-format auto | c | asm | bin
Détermine le format d'export.
c : Créer un fichier texte avec une table au format C
asm : Créer un fichier texte avec une table au format assembleur
bin : Créer un fichier binaire
-name tableName
Pour les formats texte, détermine le nom de la structure à créer.
-data dec | hexa | hexa0x | hexaH | hexa$ | hexa# | bin
Pour les formats texte, détermine la façon d'écrire les chiffres (123, 0x12, $12, 12h, etc.).
Découpage des sprites
-pos x y
Position de départ de la zone à extraire dans l'image source (en pixels).
-size x y
Taille des blocks à extraire (en pixels).
-num x y
Nombre de blocks à extraire.
-skip
Ne pas exporter les blocks ne contenant que des pixels transparents.
Couleurs
-trans color
La couleur de l'image qui permettra de déterminer les zones transparentes.
Elle doit être donnée sous forme hexadécimal selon le format 0xRRGGBB (8-bits pour chaque canal).
-bpc 1 | 4 | 8
Nombre de bits-par-couleurs (BPC).
1-bit : Monochrome (2 couleurs). Si une couleur de transparence est donnée, les pixels transparents vaudront 0 et tous les autres 1. Sinon, les pixels de couleur noir "pur" (0x000000) vaudront 0 et tous les autres 1.
4-bits : Index sur une palette de 16 couleurs.
8-bits : Valeur GBR au format [G:3|R:3|B2]
-pal msx1 | custom
Dans le cas du format 4-bits-par-couleur (16 couleurs), permet de choisir entre la palette par défaut du MSX (fixe) ou bien demander au programme de créer une palette spécifique en fonction des couleurs de l'image de source.
-palcount n
Dans le cas de l'utilisation d'une palette custom , permet de déterminer le nombre de couleurs maximum qu'elle peut utiliser.
-dither none | floyd | bayer4 | bayer8 | bayer16 | cluster6 | cluster8 | cluster16
Différent méthode de tramage (dithering) pour le mode 1-bit-par-couleur.
Compression
-compress none | crop16 | cropline16 | crop32 | cropline32 | crop256 | cropline256 | rle0 | rle4 | rle8
Différent mode de compression sans perte pour réduire la taille des données exportées.
Les méthodes de compression Crop16/32/256, CropLine16/32/256 et RLE0 n'ont de sens que si une couleur de transparence est spécifiée.
Crop
Permet de réduite la zone exporté en taillant (crop) les bordures transparentes du sprite.
Pour chaque sprite, l'algorithme détermine la position X et Y minimal et maximal des pixels non-transparents.
Par ex., si dans un sprite 16x16, aucun pixel non-transparents n'apparait avant la colonne 3 et aucun après la colonne 10, le programme n'exportera le sprite qu'entre ces deux colonnes.
Au début de chaque sprite, un header détermine les valeurs min/max en X et Y pour que les données puissent être décompressé correctement.
Il existe 3 versions de l'algorithme :
Nom | Taille max | Entête |
Crop16 | 16x16 px | 2 bytes : [minX:4|maxX:4] [minY:4|maxY:4] |
Crop32 | 32x32 px | 2 bytes : [minX:3|maxX:5] [minY:3|maxY:5] |
Crop256 | 256x256 px | 4 bytes : [minX] [maxX] [minY] [maxY] |