Class PIFReader
java.lang.Object
fr.iutfbleau.sae.mpif.PIFReader
Cette classe permet de lire un fichier .pif et de reconstruire l'image d'origine.
Elle lit d'abord l'en-tête puis les longueurs des codes canoniques.
Ensuite elle reconstruit les codes, construit les arbres de décodage
et décode les pixels un par un pour obtenir l'image RGB finale.
Elle est utilisée par le programme Viewer pour afficher une image .pif.
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbuildDecodageTree(Map<String, Integer> codes) Construit un arbre de décodage à partir des codes canoniques.decodePifFile(File file) Cette methode sert de point d'entrer pour le decodage d'un pif.decodePixels(BitInputStream in, DecodeNode red, DecodeNode green, DecodeNode blue) Décode l'ensemble des pixels de l'image en utilisant les trois arbres correspondant aux composantes rouge, verte et bleue.static booleanVérifie si un fichier est un fichier .pif valide.voidLit les longueurs des code canoniques pour les trois composantes rouge, vert et bleu.voidLit l'en-tête du fichier .pif.rebuildCanonical(int[] lengths) Reconstruit les codes canoniques à partir des longueurs stockées dans le fichier.
-
Constructor Details
-
PIFReader
public PIFReader()
-
-
Method Details
-
decodePifFile
Cette methode sert de point d'entrer pour le decodage d'un pif. Elle Lit complètement un fichier .pif et renvoie l'image décodée. Elle lit l'en-tête, récupère les longueurs des codes, reconstruit les codes canoniques puis les arbres nécessaires au décodage. Enfin elle lit pixel par pixel.- Parameters:
file- fichier .pif à décoder- Returns:
- l'image obtenue après décodage
- Throws:
Exception- si le fichier est invalide ou si une erreur survient pendant la lecture
-
readHeader
Lit l'en-tête du fichier .pif. On y récupère la largeur et la hauteur de l'image, chacune codée sur 16 bits.- Parameters:
in- flux binaire à lire- Throws:
IOException- si la lecture échoue
-
readCanonicalTables
Lit les longueurs des code canoniques pour les trois composantes rouge, vert et bleu. Chaque table contient 256 valeurs sur 5 bits. Ces longueurs permettront de reconstruire les vrais codes plus tard- Parameters:
in- flux binaire d'entrée pdfpdof- Throws:
IOException- si erreur de lecture se produit
-
rebuildCanonical
Reconstruit les codes canoniques à partir des longueurs stockées dans le fichier. On trie d'abord les paires (symbole, longueur), puis on génère les codes en appliquant la règle des codes canoniques.- Parameters:
lengths- tableau contenant les longueurs des codes pour 256 symboles- Returns:
- une table qui associe un code binaire (sous forme de texte) à son symbole
-
buildDecodageTree
Construit un arbre de décodage à partir des codes canoniques. Chaque code binaire définit un chemin dans l'arbre jusqu'à une feuille contenant le symbole à décoder.- Parameters:
codes- dictionnaire associant le code binaire au symbole- Returns:
- la racine de l'arbre de décodage
-
decodePixels
public RGBImage decodePixels(BitInputStream in, DecodeNode red, DecodeNode green, DecodeNode blue) throws IOException Décode l'ensemble des pixels de l'image en utilisant les trois arbres correspondant aux composantes rouge, verte et bleue. Chaque symbole est lu en parcourant l'arbre bit par bit.- Parameters:
in- flux binaire contenant les données des pixelsred- arbre de décodage pour le rougegreen- arbre pour le vertblue- arbre pour le bleu- Returns:
- l'image RGB reconstruite
- Throws:
IOException- si un symbole est invalide ou si la lecture échoue
-
isPIFFile
Vérifie si un fichier est un fichier .pif valide. On teste l'existence du fichier, son extension et une taille minimale permettant au moins de contenir l'en-tête et les tables de longueurs.- Parameters:
f- fichier à tester- Returns:
- true si le fichier semble être un .pif valide, sinon false
-