La Place des Développeurs GraphxConv : Convertir des images vers le Screen2 du MSX1
ericb59
Membre non connecté
Conseiller Municipal
Je vous présente un nouvel outils, permettant de transformer des images BMP d'une résolution de 256 x 192 pixels, vers la palette de couleur MSX1 pour un affichage en screen2.
Exemples d'images converties et affichées sur MSX1
L'outil utilise l'algorithme CIEDE 2000, et est fortement inspiré du code présenté par Leandro Correia sur MSX.ORG.
Le logiciel est disponible en version Windows et Mac ici :
http://msx.ebsoft.fr/MSX1GraphicConverter/GraphxConv.zip
Une documentation est incluse.
Pour les plus curieux, j'ai déposé mon code source ici :
https://github.com/ericb59/graphxconv
Manuel :
L'outil converti l'image source et sauvegarde la nouvelle image au format MSX pour le Mode 2. La conversion peut prendre quelques dizaines de secondes, suivant la puissance de votre ordinateur.
graphxconv : se lance en ligne de commande. Une interface graphique est alors disponible permettant de visualiser la conversion, puis de comparer cette conversion avec de nouveaux paramètres de conversion ou de nouvelles palettes de couleurs.
Plusieurs palettes de couleurs sont disponibles.
- 2 versions de la palette MSX de base
- 1 version tronquée de la palette MSX permettant une conversion en Noir et Blanc.
- Une palette simulant l'affichage sur un C64
- Une palette simulant l'affichage sur un Spectrum
- Une palette simulant l'affichage sur une Game Boy
- Une palette deux couleurs simulant l'affichage en noir et blanc.
Bien que des palettes de micro-ordinateurs autres que le MSX soient proposées, l'exportation de l'image convertie ne se fait pour l'instant que dans le format binaire pour MSX (Chargement avec BLOAD). D'autre modèles de sauvegarde pourront être ajoutés plus tard.
La ligne de commande pour lancer une conversion est la suivante :
graphxconv <Input file> <output file> [-i<n> -p<n> -t<n> -d<n> -c -h]
Les deux premiers paramètres sont obligatoires.
<Input file> : correspond au chemin et au nom du fichier BMP à convertir
<Output file> : Correspond au chemin et au nom du fichier converti au format MSX
Les autres paramètres sont facultatifs. Si ils ne sont pas précisés, les paramètres par défaut sont utilisés.
-i<n> : si n=0, cela indique que vous ne désirez pas utiliser l'interface graphique. Une fois la conversion et l'image sauvegardée, l'interface graphique est close. Toute autre valeur, active l'interface graphique. Par défaut la valeur est 1 (Ex : -i0)
-p<n> : n, indique la palette à utiliser pour la conversion.
Par défaut la palette 0 est utilisée. (Ex: -p1)
n, ne peut pas être supérieur au nombre de palettes inclues dans le programme.
-t<n> : n, indique la tolérance sur les couleurs, lors du processus de conversion.
Par défaut la tolérance est réglée sur 100.
La valeur de tolérance doit être comprise entre 0 et 100. (Ex: -t80)
-d<n> : n, indique le niveau de détails qui sera utilisé lors de la conversion.
Par défaut le niveau de détails est réglé sur 32.
Le niveau de détails doit être compris entre 0 et 255. (Ex: d100)
-c : Affiche les informations de copyright.
-h : affiche l'aide.
A propos des paramètres.
Le paramètre de Tolérance de couleur influe sur le tramage des couleurs, un niveau Tolérance couleur à 0 ne produit pas de tramage.
Le paramètre Niveau de détails, devrait être élevé pour les conversion de photos, pour avoir un meilleur résultat. UN niveau de détails bas, donne la priorité sur les zones à forte luminosité. Plus la valeur sera haute, moins la luminosité sera prise en compte lors des conversions.
La liste des palettes inclues dans le logiciel.
0 : MSX Palette 0
1 : MSX Palette 1
2 : C64 Palette
3 : SPECTRUM Palette
4 : GAME BOY Palette
5 : B & W Palette
6 : MSX SC2 B & W (Compatible MSX1, Screen 2)
L'interface graphique
Une fois que 'graphxconv' est lancé une fenêtre de 808 x 616 Pixels est ouverte.
La première image affichée en haut à gauche est l'image originale.
Une fois la conversion réalisée, à sa droite sera affiché l'image convertie avec la palette choisie.
Si vous n'êtes pas satisfait du résultat, vous pouvez tenter une nouvelle conversion en changeant des paramètres, sans avoir à relancer le programme.
Utilisez les touches suivante :
Touche '1' : Décrémente le paramètre de tolérance couleur de 20 unités
Touche '2' : Incrémente le paramètre de tolérance couleur de 20 unités
Touche '8' : Décrémente le paramètre de Niveau de détails de 20 unités
Touche '9' : Incrémente le paramètre de Niveau de détails de 20 unités
Touche 'P' : Utilise la palette suivante (0 -> 6 -> 0 ->)
Touche 'S' : Insert un nouveau Slot d'image
Touche 'ESC' : Quitte le programme
Chaque appuis sur une touche de contrôle, (sauf ESC et S) relance une nouvelle conversion de l'image originale, affiche le résultat, et sauvegarde le résultat sous le nom que vous avez indiqué.
Chaque nouvelle conversion s'affiche au dessus de la précédente.
Si vous désirez comparer plusieurs versions de l'image convertie, insérez un nouveaux Slot image en appuyant sur la touche 'S'. Une nouvelle portion de la fenêtre se dégagera, et la prochaine conversion s'affichera dans ce nouveau Slot. Vous pouvez ouvrir au total 8 slots supplémentaires, et ainsi comparer 8 versions de l'image convertie.
Graphx Converter 0.5 April 2019
Original conversion routine by Leandro Correia
This tool was coded in C, with SDL2 Graphic Library
by Eric Boez 2019 - BZ Prod Game Studio
This tool is provided as is, with no guaranty
Under the Creative Commons CC BY_SA 4.0 license Edité par ericb59 Le 20/04/2019 à 09h04
Exemples d'images converties et affichées sur MSX1
L'outil utilise l'algorithme CIEDE 2000, et est fortement inspiré du code présenté par Leandro Correia sur MSX.ORG.
Le logiciel est disponible en version Windows et Mac ici :
http://msx.ebsoft.fr/MSX1GraphicConverter/GraphxConv.zip
Une documentation est incluse.
Pour les plus curieux, j'ai déposé mon code source ici :
https://github.com/ericb59/graphxconv
Manuel :
L'outil converti l'image source et sauvegarde la nouvelle image au format MSX pour le Mode 2. La conversion peut prendre quelques dizaines de secondes, suivant la puissance de votre ordinateur.
graphxconv : se lance en ligne de commande. Une interface graphique est alors disponible permettant de visualiser la conversion, puis de comparer cette conversion avec de nouveaux paramètres de conversion ou de nouvelles palettes de couleurs.
Plusieurs palettes de couleurs sont disponibles.
- 2 versions de la palette MSX de base
- 1 version tronquée de la palette MSX permettant une conversion en Noir et Blanc.
- Une palette simulant l'affichage sur un C64
- Une palette simulant l'affichage sur un Spectrum
- Une palette simulant l'affichage sur une Game Boy
- Une palette deux couleurs simulant l'affichage en noir et blanc.
Bien que des palettes de micro-ordinateurs autres que le MSX soient proposées, l'exportation de l'image convertie ne se fait pour l'instant que dans le format binaire pour MSX (Chargement avec BLOAD). D'autre modèles de sauvegarde pourront être ajoutés plus tard.
La ligne de commande pour lancer une conversion est la suivante :
graphxconv <Input file> <output file> [-i<n> -p<n> -t<n> -d<n> -c -h]
Les deux premiers paramètres sont obligatoires.
<Input file> : correspond au chemin et au nom du fichier BMP à convertir
<Output file> : Correspond au chemin et au nom du fichier converti au format MSX
Les autres paramètres sont facultatifs. Si ils ne sont pas précisés, les paramètres par défaut sont utilisés.
-i<n> : si n=0, cela indique que vous ne désirez pas utiliser l'interface graphique. Une fois la conversion et l'image sauvegardée, l'interface graphique est close. Toute autre valeur, active l'interface graphique. Par défaut la valeur est 1 (Ex : -i0)
-p<n> : n, indique la palette à utiliser pour la conversion.
Par défaut la palette 0 est utilisée. (Ex: -p1)
n, ne peut pas être supérieur au nombre de palettes inclues dans le programme.
-t<n> : n, indique la tolérance sur les couleurs, lors du processus de conversion.
Par défaut la tolérance est réglée sur 100.
La valeur de tolérance doit être comprise entre 0 et 100. (Ex: -t80)
-d<n> : n, indique le niveau de détails qui sera utilisé lors de la conversion.
Par défaut le niveau de détails est réglé sur 32.
Le niveau de détails doit être compris entre 0 et 255. (Ex: d100)
-c : Affiche les informations de copyright.
-h : affiche l'aide.
A propos des paramètres.
Le paramètre de Tolérance de couleur influe sur le tramage des couleurs, un niveau Tolérance couleur à 0 ne produit pas de tramage.
Le paramètre Niveau de détails, devrait être élevé pour les conversion de photos, pour avoir un meilleur résultat. UN niveau de détails bas, donne la priorité sur les zones à forte luminosité. Plus la valeur sera haute, moins la luminosité sera prise en compte lors des conversions.
La liste des palettes inclues dans le logiciel.
0 : MSX Palette 0
1 : MSX Palette 1
2 : C64 Palette
3 : SPECTRUM Palette
4 : GAME BOY Palette
5 : B & W Palette
6 : MSX SC2 B & W (Compatible MSX1, Screen 2)
L'interface graphique
Une fois que 'graphxconv' est lancé une fenêtre de 808 x 616 Pixels est ouverte.
La première image affichée en haut à gauche est l'image originale.
Une fois la conversion réalisée, à sa droite sera affiché l'image convertie avec la palette choisie.
Si vous n'êtes pas satisfait du résultat, vous pouvez tenter une nouvelle conversion en changeant des paramètres, sans avoir à relancer le programme.
Utilisez les touches suivante :
Touche '1' : Décrémente le paramètre de tolérance couleur de 20 unités
Touche '2' : Incrémente le paramètre de tolérance couleur de 20 unités
Touche '8' : Décrémente le paramètre de Niveau de détails de 20 unités
Touche '9' : Incrémente le paramètre de Niveau de détails de 20 unités
Touche 'P' : Utilise la palette suivante (0 -> 6 -> 0 ->)
Touche 'S' : Insert un nouveau Slot d'image
Touche 'ESC' : Quitte le programme
Chaque appuis sur une touche de contrôle, (sauf ESC et S) relance une nouvelle conversion de l'image originale, affiche le résultat, et sauvegarde le résultat sous le nom que vous avez indiqué.
Chaque nouvelle conversion s'affiche au dessus de la précédente.
Si vous désirez comparer plusieurs versions de l'image convertie, insérez un nouveaux Slot image en appuyant sur la touche 'S'. Une nouvelle portion de la fenêtre se dégagera, et la prochaine conversion s'affichera dans ce nouveau Slot. Vous pouvez ouvrir au total 8 slots supplémentaires, et ainsi comparer 8 versions de l'image convertie.
Graphx Converter 0.5 April 2019
Original conversion routine by Leandro Correia
This tool was coded in C, with SDL2 Graphic Library
by Eric Boez 2019 - BZ Prod Game Studio
This tool is provided as is, with no guaranty
Under the Creative Commons CC BY_SA 4.0 license Edité par ericb59 Le 20/04/2019 à 09h04
bonjour Eric
connais tu ceci :
http://marmsx.msxall.com/msxvw/msxvw5/index_en.php
pas besoin de ligne de commande pour charger l'image dans le logiciel
ne serait t'il pas possible de faire dans le même genre pour Graphxconv ?
connais tu ceci :
http://marmsx.msxall.com/msxvw/msxvw5/index_en.php
pas besoin de ligne de commande pour charger l'image dans le logiciel
ne serait t'il pas possible de faire dans le même genre pour Graphxconv ?
ericb59
Membre non connecté
Conseiller Municipal
Oui bien sur on pourrait.
Le problème c'est que que quand on intègre une Graphic User Interface, le développeur choisi une librairie qui marche soit pour Windows, soit pour linux, soit pour Mac, et moi je veux des outils qui fonctionnent sur tous les OS.
Sylvain m'a pointé le framework QT5, qui permet de créer des GUI en Corss-platefrom. Je vais donc y regarder, et quand je serai opérationnel, j'ajouterai une vraie GUI au logiciel.
Les lignes de commandes ont leurs avantages quand tu veux automatiser les choses avec des scripts BATCH / SH
Note que MSX Viewer 5 ne permet pas de créer des conversions aussi précises pour le screen 2. L'algo utilisé CIEDE 2000 est vraiment efficace.
Il prend sont temps aussi, car la méthode de conversion se passe en mode "Brut Force", sans optimisation aucune de la méthode.
Le problème c'est que que quand on intègre une Graphic User Interface, le développeur choisi une librairie qui marche soit pour Windows, soit pour linux, soit pour Mac, et moi je veux des outils qui fonctionnent sur tous les OS.
Sylvain m'a pointé le framework QT5, qui permet de créer des GUI en Corss-platefrom. Je vais donc y regarder, et quand je serai opérationnel, j'ajouterai une vraie GUI au logiciel.
Les lignes de commandes ont leurs avantages quand tu veux automatiser les choses avec des scripts BATCH / SH
Note que MSX Viewer 5 ne permet pas de créer des conversions aussi précises pour le screen 2. L'algo utilisé CIEDE 2000 est vraiment efficace.
Il prend sont temps aussi, car la méthode de conversion se passe en mode "Brut Force", sans optimisation aucune de la méthode.
ericb59
Membre non connecté
Conseiller Municipal
oui je comprend bien.
Sinon tu mets le programme et sa librairie dans le dossier où sont stockés les images que tu veux convertir.
Du coup ca deviens plus simple.
graphxconv monimage.bmp msx.sc2
Sinon tu mets le programme et sa librairie dans le dossier où sont stockés les images que tu veux convertir.
Du coup ca deviens plus simple.
graphxconv monimage.bmp msx.sc2
ericb59
Membre non connecté
Conseiller Municipal
Je viens de tester une conversion faites sous Windows7, et effectivement la sauvegarde au format MSX ne passe pas correctement !
Etrange, je ne vois pas ce qui peut changer lorsque l'on sauvegarde les données depuis un PC ou un MAC.
je regarde à ça...
Etrange, je ne vois pas ce qui peut changer lorsque l'on sauvegarde les données depuis un PC ou un MAC.
je regarde à ça...
Papy MSX
Membre non connecté
Villageois
ericb59
Membre non connecté
Conseiller Municipal
J'ai trouvé d'où viens le problème Jipe.
Mais je m'arrache les cheveux depuis hier pour comprendre pourquoi il y a ce Bug, uniquement sur la version Windows.
Dans un fichier Screen2 on a
les 7 premiers octets pour l'entête du fichier, puis
0x0000 à 0x17FF on a les Char tiles
0x1800 à 0x1AFF, la table des caractères répétée 3 fois
0x1B00 à 0x1B7F, les attributs de sprites
0x2000 à 0x201F, la table des couleurs
0x3800 à 0x3FFF, les patterns de sprites
Les données qui forment l'image à l'écran sont les données qui se trouvent de 0x0000 à 0x17FF et celles qui se trouvent de 0x2000 à 0x201F
Lors de la sauvegarde des données sur Windows 3 octets son ajoutés dans la zone 0x1800 à 0x1AFF, ce qui décale le reste des données dont la table de couleur de 3 octets.
Voici la représentation de cette zone.
Les flèches rouges indiques les octets ajoutés : 0x0D
et voici la routine qui écrits les données:
En surbrillance la partie de la routines incriminée.
Elle écrits 3 fois les nombres 0 à 255 dans le fichier.
0,1,2,3,4,5,6,7,8,9, A, B, C, D, E ,F etc...
Mais on vois clairement que ce n'est pas ce qui est écrit dans le fichier, en fait il écrit :
0,1,2,3,4,5,6,7,8,9, D , A, B, C, D, E ,F etc ...
J'ai essayé plusieurs méthodes, j'ai même essayé d'écrire le fichier depuis un dump complet d'une image MSX. A chaque fois, j'ai 3 octets 0x0D, qui viennent s'ajouter dans le fichier au même endroit
C'est vraiment étrange... Est-ce un Big de mon compilateur sous Windows ?
Si quelque 'un peut essayer de compiler la source, ou à une idée du problème je suis tout ouïe
source ici : https://github.com/ericb59/graphxconv
Edité par ericb59 Le 22/04/2019 à 16h39
Mais je m'arrache les cheveux depuis hier pour comprendre pourquoi il y a ce Bug, uniquement sur la version Windows.
Dans un fichier Screen2 on a
les 7 premiers octets pour l'entête du fichier, puis
0x0000 à 0x17FF on a les Char tiles
0x1800 à 0x1AFF, la table des caractères répétée 3 fois
0x1B00 à 0x1B7F, les attributs de sprites
0x2000 à 0x201F, la table des couleurs
0x3800 à 0x3FFF, les patterns de sprites
Les données qui forment l'image à l'écran sont les données qui se trouvent de 0x0000 à 0x17FF et celles qui se trouvent de 0x2000 à 0x201F
Lors de la sauvegarde des données sur Windows 3 octets son ajoutés dans la zone 0x1800 à 0x1AFF, ce qui décale le reste des données dont la table de couleur de 3 octets.
Voici la représentation de cette zone.
Les flèches rouges indiques les octets ajoutés : 0x0D
et voici la routine qui écrits les données:
En surbrillance la partie de la routines incriminée.
Elle écrits 3 fois les nombres 0 à 255 dans le fichier.
0,1,2,3,4,5,6,7,8,9, A, B, C, D, E ,F etc...
Mais on vois clairement que ce n'est pas ce qui est écrit dans le fichier, en fait il écrit :
0,1,2,3,4,5,6,7,8,9, D , A, B, C, D, E ,F etc ...
J'ai essayé plusieurs méthodes, j'ai même essayé d'écrire le fichier depuis un dump complet d'une image MSX. A chaque fois, j'ai 3 octets 0x0D, qui viennent s'ajouter dans le fichier au même endroit
C'est vraiment étrange... Est-ce un Big de mon compilateur sous Windows ?
Si quelque 'un peut essayer de compiler la source, ou à une idée du problème je suis tout ouïe
source ici : https://github.com/ericb59/graphxconv
Edité par ericb59 Le 22/04/2019 à 16h39
Visiteur
Vagabond
Message : 0
Salut Eric,
Par défaut la fonction fopen ouvre les fichiers en mode texte. Windows va alors automatiquement ajouter 0x0D avant 0x0A (les fameux CR + LF retour chariot et passage à la ligne).
Pour éviter cela il suffit d'ouvrir le fichier en mode binaire en indiquant "wb" dans le fopen. Ton problème sera alors résolu
Je te conseille également de vérifier que l'ouverture du fichier a réussie. Pour cela il faut ajouter un test et poursuivre uniquement si f est différent de NULL.
Par défaut la fonction fopen ouvre les fichiers en mode texte. Windows va alors automatiquement ajouter 0x0D avant 0x0A (les fameux CR + LF retour chariot et passage à la ligne).
Pour éviter cela il suffit d'ouvrir le fichier en mode binaire en indiquant "wb" dans le fopen. Ton problème sera alors résolu
Je te conseille également de vérifier que l'ouverture du fichier a réussie. Pour cela il faut ajouter un test et poursuivre uniquement si f est différent de NULL.
ericb59
Membre non connecté
Conseiller Municipal
Effectivement Sylvain c'était bien ça le problème, il faut ouvrir le fichier en écriture en mode 'wb'.
Je pensais que c'était un mode obsolète ! En tout cas ca ne m'était pas venu à l'esprit ! Merci pour l'info Sylvain.
J'ai mis à jour la version Windows, toujours dans la même archive :
http://msx.ebsoft.fr/MSX1GraphicConverter/GraphxConv.zip
Ca devrait donc fonctionner maintenant.
Jolie l'image de fray en mode 16 couleurs jipe Edité par ericb59 Le 23/04/2019 à 20h07
Je pensais que c'était un mode obsolète ! En tout cas ca ne m'était pas venu à l'esprit ! Merci pour l'info Sylvain.
J'ai mis à jour la version Windows, toujours dans la même archive :
http://msx.ebsoft.fr/MSX1GraphicConverter/GraphxConv.zip
Ca devrait donc fonctionner maintenant.
Jolie l'image de fray en mode 16 couleurs jipe Edité par ericb59 Le 23/04/2019 à 20h07
ericb59
Membre non connecté
Conseiller Municipal
Si tu baisse le niVeau de tolérance de couleurs dans les paramètres, le tramage diminue.
Si tu mets tolérance à 0 il n'y a plus de tramage.
Faut trouver ce qui va le mieux, suivant l'image...
Si tu mets tolérance à 0 il n'y a plus de tramage.
Faut trouver ce qui va le mieux, suivant l'image...
Visiteur
Vagabond
Message : 0
ericb59 :
Je pensais que c'était un mode obsolète !
C'est Windows qui est obsolète, la startup Micro$oft a encore beaucoup de progrès à faire.
Les grandes entreprises choisissent Linux, c'est beaucoup plus robuste, souple et fiable. Depuis quelques années les distributions Linux sont accessibles au grand public, avec des solutions totalement gratuites et installation des logiciels en deux clics. Enfin voilà, c'est juste pour donner mon avis
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie