Class PIFReader


  • public class PIFReader
    extends java.lang.Object
    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 
      Constructor Description
      PIFReader()  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      DecodeNode buildDecodageTree​(java.util.Map<java.lang.String,​java.lang.Integer> codes)
      Construit un arbre de décodage à partir des codes canoniques.
      RGBImage decodePifFile​(java.io.File file)
      Cette methode sert de point d'entrer pour le decodage d'un pif.
      RGBImage 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 boolean isPIFFile​(java.io.File f)
      Vérifie si un fichier est un fichier .pif valide.
      void readCanonicalTables​(BitInputStream in)
      Lit les longueurs des code canoniques pour les trois composantes rouge, vert et bleu.
      void readHeader​(BitInputStream in)
      Lit l'en-tête du fichier .pif.
      java.util.Map<java.lang.String,​java.lang.Integer> rebuildCanonical​(int[] lengths)
      Reconstruit les codes canoniques à partir des longueurs stockées dans le fichier.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • PIFReader

        public PIFReader()
    • Method Detail

      • decodePifFile

        public RGBImage decodePifFile​(java.io.File file)
                               throws java.lang.Exception
        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:
        java.lang.Exception - si le fichier est invalide ou si une erreur survient pendant la lecture
      • readHeader

        public void readHeader​(BitInputStream in)
                        throws java.io.IOException
        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:
        java.io.IOException - si la lecture échoue
      • readCanonicalTables

        public void readCanonicalTables​(BitInputStream in)
                                 throws java.io.IOException
        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:
        java.io.IOException - si erreur de lecture se produit
      • rebuildCanonical

        public java.util.Map<java.lang.String,​java.lang.Integer> rebuildCanonical​(int[] lengths)
        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

        public DecodeNode buildDecodageTree​(java.util.Map<java.lang.String,​java.lang.Integer> codes)
        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 java.io.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 pixels
        red - arbre de décodage pour le rouge
        green - arbre pour le vert
        blue - arbre pour le bleu
        Returns:
        l'image RGB reconstruite
        Throws:
        java.io.IOException - si un symbole est invalide ou si la lecture échoue
      • isPIFFile

        public static boolean isPIFFile​(java.io.File f)
        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