(A rcrire... doc version obsolte)
pcx2jif : utilitaire pour convertir des images PCX en image JIF (Jester Image Format)

Cette commande convertit une image dans le format PCX en une image dans le format JIF. Une image JIF utilise une compression RLE adapte au processeur vido des machines Exelvision,  la faible puissance du CPU et au peu de mmoire disponible dans un Exl100. Le format JIF est dtaill ci-aprs. Le format PCX en entre doit tre en mode 8bits par pixel et n'utiliser qu'un seul plan de couleur, sans palette.
L'image PCX doit tre encode en 8 couleurs (numrotes de 0  7) pour une rsolution maximale de 320x250 pour une image couleur, et en 2 couleurs (numrotes 0 et 1) pour une rsolution maximale de 640x250 pour une image N&B monochrome (possible uniquement sur Exeltel dans le mode 80 colonnes).
La largeur d'une image doit tre un multiple de 8 pixels pour une image couleur et un multiple de 16 pixels pour une image en mode 80colonnes. Cette contrainte sur la largeur des images est une consquence directe de la gestion particulire de la mmoire cran par le VDP. La manire de gnrer ce genre d'image PCX est dtaille ci-aprs.


pcx2jif sourceFile targetFile [-b]
sourceFile = fichier PCX en entre
targetFile = fichier JIF en sortie
-b = prcise que l'image en entre est destine au mode haute rsolution monochrome (mode 80 colonnes de l'Exeltel)

Update: un format de compression peut tre prcis -1 ou -2. Dans le mode -1 la compression est optimise pour les motifs dithering simple, -2 pour des couleurs unies sans motif.
Le codage se fait maintenant verticalement et non horizontalement pour les 2 modes.
Le mode N&B n'a pas encore t rcrit et ne doit pas tre utilis pour le moment.

exemple:
pcx2jif 1942.pcx 1942.jif (mode couleur classique)
pcx2jif zebre.pcx zebre.jif (mode 80 colonnes N&B)


Comment obtenir simplement une image dans un format PCX correct ?
La premire chose est d'avoir une image dont la largeur est un multiple de 8 ou 16 selon le mode destination (couleur ou N&B haute rsolution).
On peut ensuite utiliser une bote  outil comme ImageMagick pour manipuler l'image source dans tous les sens?
- pour gnrer une image avec 8 couleurs (8bits par pixel) directement:
convert 1942.gif -dither none -posterize 2 1942_8.pcx
L'absence de "dithering" est prfrable pour une image couleur en basse rsolution. Le rsultat de cette conversion automatique est parfois peu satisfaisante si l'image source contient plus de 32 couleurs.

- pour gnrer une image avec 8 couleurs (8bits par pixel) avec filtrage manuel des seuils sur les diffrentes composantes:
convert 1942.gif -channel red -threshold 112 -channel green -threshold 112 -channel blue -threshold 112 1942_8.pcx
Il suffit de jouer sur les valeurs pour filtrer chaque composante. Le rsultat est meilleur mais le travail laborieux: un outil WYSIWYG serait le bienvenu !

- pour gnrer une image avec 2 couleurs (black & white 8bits par pixel) le travail se fait en plusieurs tapes:
D'abord on convertit l'image source en monochrome. On peut utiliser un motif (ordered-dither) pour amliorer le rsultat (et simuler des niveaux de gris)
convert 1942.gif -scale 100%x50% -ordered-dither o2x2 -colors 2 -monochrome 1942.pcx
L'image est en PCX 1bit par pixel, on ramne alors le format  8 bits par pixel comme suit:
convert 1942.pcx -dither none -posterize 2 1942.pcx


Spcification du format JIF (Jester File Format):
L'image est compose d'un en-tte de 10 octets, puis des donnes de l'image.
Header: 10 octets
- octets 1  3 : les caractres J I F
- octet 4 : numro de version (1 pour l'instant)
- octet 5 : largeur de l'image /8 ou /16 (1  40, il faut multiplier par 8 pour une image couleur et par 16 pour une image N&B haute rsolution)
- octet 6 : hauteur d'une image en nombre de lignes (1  250)
- octets 7  8 : taille des donnes image en octets (octet 7 = MSB)
- octet 9 : flag d'image (bit 0 = 1 pour une image couleur, 0 pour image N&B haute rsolution)
						bit 2-1 pour coder le type de compression: 01 mthode 1, 10 mthode 2
- octet 10 : rserv

Donnes d'image: (en partie obsolte, la compression est ralise verticalement)
L'image est compresse et utilise une mthode RLE spcifique.
1) mode couleur
Un octet contient toute les informations de rptition d'une couleur (en cas de compression) ou le nombre de blocs de 8 pixels non compresss.
Octet lu = b7 b6 b5 b4 b3 b2 b1 b0
si b7=1 alors il s'agit d'une succession de blocs de 8 pixels non compresss
	- les bits b6  b0 indiquent le nombre de blocs -1  lire.
	- un bloc de 8 pixels non compress est stock de la mme manire qu'en mmoire VDP: octet composante bleu, octet composante verte, octet composante rouge. Un bloc est donc constitu de 3 octets.
	- il faut donc lire 3* le nombre de blocs prcis dans le premier octet.
sinon si b7=0 alors il s'agit d'une rptition de couleur (compression)
	- les bits b2b1b0 indiquent la valeur de la couleur rpte (format VDP 3556)
	- les bits b6  b3 indiquent le nombre de rptition -1 de blocs de cette couleur. On rpte donc des paquets de 8 pixels de la mme couleur.
1) mode N&B haute rsolution (80 colonnes)... A revoir intgralement !
Un octet contient toute les informations de rptition d'une couleur (en cas de compression) ou le nombre de blocs de 16 pixels non compresss.
Octet lu = b7 b6 b5 b4 b3 b2 b1 b0
si b7=1 alors il s'agit d'une succession de blocs de 16 pixels non compresss
	- les bits b6  b0 indiquent le nombre de blocs -1  lire.
	- un bloc de 16 pixels non compress est stock de la mme manire qu'en mmoire VDP: octet composante bleu, octet composante verte. Un bloc est donc constitu de 2 octets (la composante rouge est ignore et pas stocke).
	- il faut donc lire 2* le nombre de blocs prcis dans le premier octet.
sinon si b7=0 alors il s'agit d'une rptition de couleur (compression)
	- le bit b0 indique la valeur de la couleur rpte
	- les bits b6  b1 indiquent le nombre de rptition -1 de blocs de cette couleur. On rpte donc des paquets de 16 pixels de la mme couleur.

Les dmos 1 et 2 qui sont des visualiseurs sur K7 illustrent l'utilisation de ce format (lecture et dcompression). Les algorithmes de dcompression pour ces deux programmes sont tout  fait rutilisables: ils permettent la dcompression d'une image ligne par ligne pour des donnes compresses en mmoire VDP.

