Section courante

A propos

Section administrative du site

Introduction

L'extension de fichier .RLE (abréviation de l'anglicisme Run-length encoding) est conçu pour fournir un moyen efficace et indépendant du périphérique d'entreposage d'images raster à plusieurs niveaux. Des images de taille et de profondeur arbitraires peuvent être enregistrées. Il n'est pas conçu pour les images binaires (bitmap). Il repose sur plusieurs concepts de base. Le concept central est celui d'un canal. Un canal correspond à une seule couleur, il y a donc normalement un canal rouge, un canal vert et un canal bleu. Jusqu'à 255 canaux de couleur sont disponibles pour utilisation; un canal est réservé aux données "alpha". Bien que le format prenne en charge les canaux arbitrairement profonds, la mise en oeuvre actuelle est limitée à 8 bits par canal.

Les données d'image sont entreposées dans un fichier RLE sous forme de ligne de balayage, les données de chaque canal de la ligne de balayage étant regroupées. Les séries de valeurs de pixels identiques sont compressées en un nombre et une valeur. Cependant, les séquences de pixels différents sont également entreposées efficacement (et non comme une séquence de séquences de pixels uniques). L'entête du fichier contient une grande quantité d'informations sur l'image, y compris sa taille, le nombre de couches enregistrées, si elle a un canal alpha, une palette de couleurs facultative et des commentaires. Les commentaires peuvent être utilisés pour ajouter des informations supplémentaires arbitraires à l'image enregistrée.

Une interface de sous-programme a été écrite pour permettre aux programmes de lire et d'écrire des fichiers au format RLE. Deux interfaces sont disponibles, une interprétant complètement le fichier RLE et renvoyant les données de pixels de la ligne de balayage, et une renvoyant une liste de données "brutes" d'exécution et de pixel. Le second est plus efficace, mais plus difficile à utiliser, le premier est facile à utiliser, mais plus lent. Le format RLE a été utilisé pour enregistrer des images à partir de nombreuses sources et pour afficher des images enregistrées sur de nombreux écrans différents et à partir de nombreux ordinateurs différents.

Format RLE

Toutes les données du fichier RLE sont traitées comme un flux d'octets. Lorsque des quantités supérieures à 8 bits se produisent, elles sont écrites dans l'ordre des octets PDP-11 (octet de poids faible en premier). Le fichier RLE se compose de deux parties, un entête suivi des données de balayage de ligne. L'entête contient des informations générales sur l'image, tandis que les données de la ligne de balayage sont un flux d'opérations décrivant l'image elle-même. Voici l'entête de fichier RLE :

Champ Taille Description
Magic number 2 octets Ce champ permet d'indiquer le numéro magique de la signature.
xpos 2 octets Ce champ permet d'indiquer la position horizontale.
ypos 2 octets Ce champ permet d'indiquer la position verticale.
xsize 2 octets Ce champ permet d'indiquer la largeur de l'image.
ysize 2 octets Ce champ permet d'indiquer la hauteur de l'image.
flags 1 octet Ce champ permet d'indiquer les drapeaux d'options de l'image.
ncolors 1 octet Ce champ permet d'indiquer le nombres de couleurs
pixelbits 1 octet Ce champ permet d'indiquer le nombre de bits par pixel.
ncmap 1 octet Ce champ permet d'indiquer la palette des couleurs.
cmaplen 1 octet Ce champ permet d'indiquer la taille de la palette des couleurs.
red bg 1 octet Ce champ permet d'indiquer la quantité de rouge de la couleur d'arrière-plan.
green bg 1 octet Ce champ permet d'indiquer la quantité de vert de la couleur d'arrière-plan.
blue bg 1 octet Ce champ permet d'indiquer la quantité de bleu de la couleur d'arrière-plan.
color map entry 0 2 octets Ce champ permet d'indiquer le premier entrée de palette de couleur.
color map entry 1 2 octets Ce champ permet d'indiquer le deuxième entrée de palette de couleur.
... ... ...

L'entête a une partie fixe et une partie variable. Le nombre magique de la signature identifie le fichier comme un fichier RLE. Après, les coordonnées du coin inférieur gauche de l'image et la taille de l'image dans les directions X et Y. Les images sont définies dans un premier système de coordonnées quadrant (origine en bas à gauche, X augmentant vers la droite, Y augmentant.) Ainsi, l'image est enfermée dans le rectangle selon la formule suivante :

[xpos,xpos+xsize-1] x [ypos,ypos+ysize-1]

La position et la taille sont des quantités entières de 16 bits; des images jusqu'à 32 Ko carrés peuvent être enregistrées (les tailles ne doivent pas être négatives).

Un octet d'indicateur suit. Il y a actuellement quatre drapeaux définis :

Nom Description
ClearFirst Si cet drapeau est défini, le rectangle de l'image doit d'abord être effacé à la couleur d'arrière-plan (q.v.) avant de lire les données de la ligne de balayage.
NoBackground Si cet drapeau est défini, aucune couleur d'arrière-plan n'est fournie et le drapeau ClearFirst doit être ignoré.
Alpha Ce drapeau indique la présence d'un canal "alpha". Le canal alpha est utilisé par les logiciels de composition d'images pour mélanger correctement les bords anti-crénelés. Il est entreposé sous le canal -1 (255).
Comments Si ce drapeau est défini, les commentaires sont présents dans la partie variable de l'entête, immédiatement après la palette de couleurs.

L'octet suivant est traité comme une valeur de 8 bits non signée et indique le nombre de canaux de couleur ayant été enregistrés. Il peut avoir n'importe quelle valeur de 0 à 254 (le canal 255 est réservé aux valeurs alpha).

L'octet pixelbits donne le nombre de bits dans chaque pixel. La seule valeur actuellement prise en charge par le logiciel est 8 (en fait, cet octet est actuellement ignoré lors de la lecture des fichiers RLE). Les tailles de pixel prenant plus d'un octet seront d'abord compactées par octet de poids faible.

Les deux octets suivants décrivent la taille et la forme de la palette des couleurs. Le champ ncmap est le nombre de canaux de couleur dans la palette de couleurs. Il n'est pas nécessaire qu'il soit identique à ncolors, mais l'interprétation des valeurs de ncmap différentes de 0, 1 ou ncolors peut être ambiguë, sauf si ncolors est égal à 1. Si ncmap est égal à zéro, aucune palette de couleurs n'est enregistrée. cmaplen est la base logarithmique 2 de la longueur de chaque canal de la palette des couleurs. Ainsi, une valeur pour cmaplen de 8 indique une palette de couleurs avec 256 entrées par canal.

Immédiatement après l'entête fixe se trouve la partie variable de l'entête de fichier. Cela commence par la couleur d'arrière-plan. La couleur d'arrière-plan a des entrées ncolors; si nécessaire, il est rempli à un nombre impair d'octets avec un octet de remplissage à la fin (puisque l'entête fixe est un nombre impair d'octets, cela revient à une limite de 16 bits).

Après la couleur d'arrière-plan se trouve la palette des couleurs, le cas échéant. Les valeurs de la palette de couleurs sont entreposées sous forme de quantités de 16 bits, justifiées à gauche dans le mot. Le logiciel interprétant la palette des couleurs doit appliquer un décalage approprié à l'application ou au matériel utilisé. Cette convention permet d'utiliser la palette des couleurs sans connaître la précision de sortie d'origine. Les canaux de la palette sont entreposés par ordre numérique croissant (en commençant par le canal 0), les entrées de chaque canal étant également entreposées par ordre croissant (en commençant par l'entrée 0). Les entrées de la palette des couleurs pour chaque canal sont entreposées de manière contiguë.

Les commentaires, s'ils sont présents, suivent la palette des couleurs. Une quantité de 16 bits donnant la longueur du bloc de commentaire vient en premier. Si la longueur est impaire, un octet de remplissage sera présent à la fin, rétablissant l'alignement de 16 bits (mais cet octet ne fait pas partie des commentaires). Le bloc de commentaires contient n'importe quel nombre de chaînes de caractères de texte terminées par NULL. Ces chaînes de caractères seront classiquement de la forme "nom=valeur", permettant une récupération aisée d'informations spécifiques. Cependant, il n'existe aucune restriction selon laquelle un nom donné n'apparaît qu'une seule fois et un commentaire peut contenir une chaîne de caractères arbitraire. Le but du bloc de commentaires est de permettre aux informations d'être jointes au fichier n'étant pas spécifiquement prévues au format RLE.

Les données de lignes de balayage

Les données de la ligne de balayage consistent en une séquence d'opérations, telles que Run, SetChannel et Pixels, décrivant l'image actuelle. Une image est entreposée en commençant dans le coin inférieur gauche et en continuant vers le haut par ordre croissant de nombre de lignes de balayage. Chaque opération et ses données associées occupent un nombre pair d'octets, de sorte que toutes les opérations commencent sur une limite de 16 bits. Cela rend la mise on oeuvre plus efficace sur de nombreuses architectures.

Chaque opération est identifiée par un op-code de 8 bits et peut avoir un ou plusieurs opérandes. Les opérations sur un seul opérande tiennent dans un seul mot de 16 bits si la valeur de l'opérande est inférieure à 256. Pour que les valeurs des opérandes ne soient pas limitées à l'intervalle de 0 à 255, chaque opération a une longue variante, dans laquelle l'octet suivant l'op-code est ignoré et le mot suivant est considéré comme une quantité de 16 bits. La variante longue d'un op-code est indiquée en définissant le bit 0x40 dans l'op-code (cela permet 64 op-codes, dont 6 ont été utilisés jusqu'à présent.) Les deux formats d'opérandes simples sont présenter ici :

Les descriptions sont formulées en fonction des actions nécessaires pour interpréter le fichier. Trois indices sont nécessaires: le canal actuel, le numéro de ligne de balayage et l'indice de pixel. Le canal actuel est le canal auquel les opérations de données s'appliquent. Le numéro de la ligne de balayage est juste la position Y de la ligne de balayage dans l'image. L'index de pixel est la position X du pixel dans la ligne de balayage. Les opérations sont :

Opération Description
SkipLines Incrémente le numéro de ligne de balayage de la valeur de l'opérande. Cette opération met fin au balayage de ligne en cours. L'index de pixel doit être réinitialisé à la valeur xpos de l'entête.
SetColor Régle le canal actuel sur la valeur de l'opérande. Cette opération n'a pas de variante longue. Notez qu'une valeur d'opérande de 255 sera interprétée comme -1, indiquant le canal alpha. Toutes les autres valeurs d'opérande sont positives. L'index de pixel est réinitialisé à la valeur xpos.
SkipPixels Passer les pixels de la ligne de balayage actuelle. Incrémenter l'index de pixel de la valeur de l'opérande. Les pixels ignorés resteront dans la couleur d'arrière-plan.
PixelData Après cet op-code se trouve une séquence de valeurs de pixels. La longueur de la séquence est donnée par la valeur de l'opérande. Si la longueur de la séquence est impaire, un octet de remplissage est ajouté. Les valeurs de pixel sont insérées dans la ligne de balayage dans l'ordre X croissant. L'index de pixel est incrémenté de la longueur de la séquence.
Run C'est le seul op-code à deux opérandes. Le premier opérande est la longueur (N) de l'exécution. L'opérande 1 seconde est la valeur du pixel, suivie d'un octet de remplissage si nécessaire. Les N pixels suivants de la ligne de balayage sont réglés sur la valeur de pixel donnée. L'index de pixel est incrémenté de N, pour pointer vers le pixel suivant l'analyse.
EOF Cet op-code n'a pas d'opérande et indique la fin du fichier RLE. Il est fourni pour que les fichiers RLE puissent être concaténés ensemble et être toujours correctement interprétés. Ce n'est pas obligatoire, une fin physique de fichier indiquera également la fin des données RLE.


Dernière mise à jour : Dimanche, le 27 décembre 2020