Introduction
L'extension du fichier «.MSP» est format d'image originaire du logiciel Microsoft Paintbrush pour le système d'exploitation DOS. Bien que Microsoft ait fourni PC Paintbrush avec sa souris pendant de nombreuses années, il a également développé son propre programme Microsoft Paintbrush. Le logiciel Microsoft Paint, comme il est également connu, est un descendant de PC Paintbrush, mais n'a désormais plus de relation avec le produit ZSoft. Le logiciel Microsoft Paint est l'un des accessoires fournis avec Windows et est familier à tous ceux ayant travaillé avec cet environnement graphique et système d'exploitation. Le format natif développé à l'origine pour Microsoft Paint est appelé format MSP. Les fichiers l'utilisant ont généralement l'extension .MSP. Le format MSP est, à toutes fins pratiques, désormais disparu. En fait, Microsoft Paint n'écrit plus le format. Il a été remplacé par le format BMP de Windows, devant être utilisé pour le développement de nouvelles applications. Cependant, il reste toujours quelques fichiers MSP à rechercher, il vaut donc la peine de pouvoir lire le format.
Structure du fichier
Le format MSP, comme le format MacPaint, est réservé à l'imagerie monochrome. Deux versions du format ont été développées. La version originale 1 du format ne supportait aucun type de compression d'image. La version 2 du format a ajouté une compression d'image à l'aide d'un schéma RLE, similaire à l'algorithme utilisé dans le format PCX. La version 2 a également ajouté un tableau des longueurs de lignes de balayage codées, afin que les lignes de balayage codées individuelles puissent être localisées et extraites sans avoir besoin d'analyser l'image depuis son début. Les deux variantes de format utilisent la même structure d'entête de fichier de 32 octets. Les deux formats peuvent être distingués par les valeurs de deux champs dans l'entête.
Version 1
La version 1 du format définit deux composantes de fichier, un entête et un Bitmap. Le Bitmap n'est pas codé et contient 1 bit par pixel. Ainsi, chaque octet du bitmap définit 8 pixels. Les lignes de balayage doivent contenir un nombre pair d'octets, de sorte qu'elles peuvent être remplies avec 0 à 15 bits inutilisés. Les lignes de numérisation sont présentées du haut vers le bas de l'image. Les fichiers de la version 1 se distinguent par des valeurs clefs de 6144h et 4D6Eh.
Version 2
La version 2 ajoute une compression d'image RLE au format. Le schéma de compression code des exécutions d'octets répétitives. Pendant la décompression, un octet d'image est lu. Si l'octet est différent de zéro, il indique un compteur. Le nombre d'octets est lu dans le fichier et les octets sont utilisés tels quels. Si le nombre d'octets est le nombre de répétitions. Un troisième octet est lu; c'est l'octet de données étant répété le nombre de fois indiqué. Par exemple, supposons que le bitmap commence par ces trois octets :
00h 80h FFh |
L'octet zéro indique une exécution répétée et les deux octets suivants définissent une exécution de 128 (80h) octets avec la valeur 255 (FFh). La version 2 du format comprend également un tableau des longueurs de ligne de balayage, étant situé entre l'entête du fichier et le Bitmap codé. Le tableau se compose d'un tableau d'entiers non signés 16 bits, un pour chaque ligne de balayage. Chaque entrée contient la longueur des données codées en octets pour la ligne de balayage correspondante. Le tableau de longueur de ligne de balayage peut inclure une ligne de longueur zéro, indiquant qu'aucune donnée n'est présente pour la ligne de balayage correspondante. Pour cette raison, le Bitmap doit être décodé en conjonction avec la lecture de la table de longueur. Cette approche fonctionnera, que des longueurs de zéro soient présentes ou non. Les fichiers de la version 2 se distinguent par des valeurs clefs de 694Ch et 536Eh.
Structure d'entête du fichier
L'entête du fichier MSP se compose de 32 octets organisés en valeurs de 16 mots. Seules quatre des valeurs de l'entête sont importantes : les deux clefs et la largeur et la hauteur du Bitmap. Les deux clefs sont utilisées pour déterminer quelle version du format est présente. La raison pour laquelle deux clefs ont été jugées nécessaires est une bizarrerie rivalisant avec les significations possibles des valeurs clefs réellement utilisées. Dans tous les cas, assurez-vous qu'ils sont lus et utilisés comme des entiers 16 bits. S'ils sont traités comme une séquence de caractères, l'ordre des octets est différent de l'ordre des octets à 2 octets en raison des conventions de classement des octets des processeurs Intel. La largeur du Bitmap en pixels est utilisée pour calculer la taille de la ligne de balayage en octets. N'oubliez pas que les lignes de balayage doivent contenir un nombre pair d'octets (c'est-à-dire un nombre entier de mots). La formule mathématique pour effectuer le calcul correctement est :
((pixels + 15) / 16) x 2 = nombres d'octets |
Cette formule dépend à la fois de l'arrondi des nombres entiers et de l'ordre d'évaluation spécifié.
Déplacement | Taille | Nom | Description |
---|---|---|---|
0 | 2 octets | key1 | Ce champ permet d'indiquer la version du format à utilisé en conjonction avec le champ key2. Les fichiers de la version 1 utilisent une valeur de 6144h; les fichiers de la version 2 utilisent une valeur de 694Ch. |
2 | 2 octets | key2 | Ce champ permet d'indiquer la version du format à utilisé en conjonction avec le champ key1. Les fichiers de la version 1 utilisent une valeur de 4D6Eh; les fichiers de la version 2 utilisent une valeur de 536Eh. |
4 | 2 octets | width | Ce champ permet d'indiquer la largeur du Bitmap en pixels. |
6 | 2 octets | height | Ce champ permet d'indiquer la hauteur du Bitmap en pixels. |
8 | 2 octets | saspx | Ce champ permet de définir le rapport d'aspect horizontale de l'écran sur lequel l'image a été créée. Il peut être ignorés, mais seraient utiles si vous deviez mettre à l'échelle le Bitmap pour un affichage différent. |
10 | 2 octets | saspy | Ce champ permet de définir le rapport d'aspect verticale de l'écran sur lequel l'image a été créée. Il peut être ignorés, mais seraient utiles si vous deviez mettre à l'échelle le Bitmap pour un affichage différent. |
12 | 2 octets | paspx | Ce champ permet de définir le rapport d'aspect horizontale d'une imprimante pour laquelle l'image a probablement été créée. Il peut être ignorés. |
14 | 2 octets | paspy | Ce champ permet de définir le rapport d'aspect verticale d'une imprimante pour laquelle l'image a probablement été créée. Il peut être ignorés. |
16 | 2 octets | pdx | Ce champ permet d'indiquer la largeur de la page de l'imprimante en pixels. Ce champ peut être ignorés. |
18 | 2 octets | pdy | Ce champ permet d'indiquer la hauteur de la page de l'imprimante en pixels. Ce champ peut être ignorés. |
20 | 2 octets | acx | Ce champ permet d'indiquer le facteur de correction d'aspect horizontal. Ce champ n'a jamais été utilisés dans aucune des versions du format et peuvent être ignorés. |
22 | 2 octets | acy | Ce champ permet d'indiquer le facteur de correction d'aspect vertical. Ce champ n'a jamais été utilisés dans aucune des versions du format et peuvent être ignorés. |
24 | 2 octets | cksum | Ce champ permet d'indiquer la somme de contrôle calculée en effectuant un «Ou exclusif binaire» des 12 premiers mots de l'entête. Étant donné qu'il existe déjà deux champs clefs, il est inutile d'utiliser cette valeur. |
26 | 2 octets | resv1 | Ce champ est réservé et doit toujours avoir la valeur 0. |
28 | 2 octets | resv2 | Ce champ est réservé et doit toujours avoir la valeur 0. |
30 | 2 octets | resv3 | Ce champ est réservé et doit toujours avoir la valeur 0. |
Comme vous pouvez le voir dans ces descriptions, les champs de l'entête MSP se compose d'informations avec une utilité limitée ou nulle. Il est probable que la conception soit influencée par le GDI des premières versions de Windows et aurait probablement plus de sens dans le contexte.
Voir également
Langage de programmation - Traitement d'image - Accueil