Files
SAE32_2025/src/fr/iutfbleau/sae/mpif/PIFReader.java
T

88 lines
2.5 KiB
Java
Raw Normal View History

2026-01-02 20:52:44 +01:00
package fr.iutfbleau.sae.mpif;
2026-01-04 18:05:46 +01:00
import fr.iutfbleau.sae.mimage.RGBImage;
2026-01-02 20:52:44 +01:00
import fr.iutfbleau.sae.util.BitInputStream;
2026-01-04 18:05:46 +01:00
import java.io.BufferedInputStream;
2026-01-02 20:52:44 +01:00
import java.io.FileInputStream;
import java.util.Map;
public class PIFReader {
private int width;
private int height;
private int[] lenR;
private int[] lenG;
private int[] lenB;
public RGBImage read(String filepath)
throws Exception {
2026-01-04 18:05:46 +01:00
// j'Utilise d'un BufferedInputStream pour une meilleure performance
2026-01-02 20:52:44 +01:00
FileInputStream fis = new FileInputStream(filepath);
2026-01-04 18:05:46 +01:00
BufferedInputStream bis = new BufferedInputStream(fis);
BitInputStream lecteur = new BitInputStream(bis);
2026-01-02 20:52:44 +01:00
// je lis l'entête et les tables canoniques
this.readHeader(lecteur);
this.readCanonicalTables(lecteur);
// je reconstructe les tables canoniques car dans le fichier on a juste les longueurs en bits
Map<String, Integer> canonR = rebuildCanonical(lenR);
Map<String, Integer> canonG = rebuildCanonical(lenG);
Map<String, Integer> canonB = rebuildCanonical(lenB);
DecodeNode trieR = buildDecodageTree(canonR);
DecodeNode trieG = buildDecodageTree(canonG);
DecodeNode trieB = buildDecodageTree(canonB);
RGBImage img = decodePixels(lecteur, trieR, trieG, trieB);
lecteur.closeFlux();
return img;
}
public void readHeader(BitInputStream in) {
2026-01-04 18:05:46 +01:00
// La largeur et l'hauteur de l'image occupe chaqun deux octets soit 16 bits :
this.width = in.readBits(16);
this.height = in.readBits(16);
2026-01-02 20:52:44 +01:00
}
public void readCanonicalTables(BitInputStream in) {
this.lenR = new int[256];
this.lenG = new int[256];
this.lenB = new int[256];
for (int i = 0; i < 256; i++){
lenR[i] = in.readBits(8);
}
for (int j = 0; j < 256; j++){
lenG[j] = in.readBits(8);
}
for (int k = 0; k < 256; k++){
lenB[k] = in.readBits(8);
}
}
2026-01-02 20:52:44 +01:00
public Map<String,Integer> rebuildCanonical(int[] lengths) {
// TODO: Implement canonical table reconstruction
return null;
}
public RGBImage decodePixels(BitInputStream in, DecodeNode red, DecodeNode green, DecodeNode blue) {
// TODO: Implement pixel decoding
return null;
}
public DecodeNode buildDecodageTree(Map<String,Integer> codes) {
// TODO: Implement trie building
return null;
}
}