1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| public void lireSegment(String nomFichier)
{
int count=0; //servira à shunter l'en tête du fichier en comptant les retours chariot
FileInputStream fichier;
int c=0;
try
{
fichier=new FileInputStream(nomFichier);
//on saute les lignes d'infos sur l'image pour passer directement à la lecture des valeurs
while(count<4)
{
c=fichier.read();
if((char)c=='\n')
{
count++;
}
}
//on va lire les premiers pixel on compte les espaces un pixel=3 espaces
char tampon='x'; //permet de garder une trace du dernier caractère lu
int red, green, blue;
do
{
String pixel=new String();
int space=0;
while(space<3)
{
c=fichier.read();
char lu=(char)c; //pour une meilleure lecture
if(c==-1)
{
break;
}
if(lu=='\n') //un retour chariot, on le considère comme un espace
{
lu=' ';
}
if(lu==' '&&tampon!=' ') //on compare le dernier caractère lu et l'actuel pour s'assurer de ne pas avoir plusieurs espaces contigus
{
space++;
}
pixel=pixel+lu;
tampon=lu;
}
if(c!=-1)
{
//on va récupérer la String pixel et récupérer les entiers correspondant aux valeurs RVB
String[] valeurs=pixel.trim().split(" ");
red=Integer.parseInt(valeurs[0]);
green=Integer.parseInt(valeurs[1]);
blue=Integer.parseInt(valeurs[2]);
if(isEmpty())
{
addAtEnd(red, green, blue, 1);
}
else if(getLastSegment().samePixel(red, green, blue)) //si les valeurs sont les mêmes que le dernier segment de la liste occurence ++
{
getLastSegment().increaseAdjacency();
}
else
{
addAtEnd(red, green, blue, 1);
}
}
}while(c!=-1);
fichier.close();
}catch(FileNotFoundException ex)
{
Terminal.ecrireStringln("Ce fichier n'existe pas");
}
catch(IOException exc)
{
Terminal.ecrireStringln("Erreur d'entree sortie");
}
} |