Compteur de lignes
Vitaldix
Messages postés
116
Date d'inscription
Statut
Membre
Dernière intervention
-
Vitaldix Messages postés 116 Date d'inscription Statut Membre Dernière intervention -
Vitaldix Messages postés 116 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j'ai un programme à faire et j'aimerai savoir la chose suivante :
j'ai besoin, à partir d'une image au format .pbm ouverte, de compter le nombre de ligne et le nombre de caractères par ligne (à la limite pour ça je fais un picture.length() et je divise ça par le nombre de lignes).
Par exemple, si mon image est :
000111000
000111000
000010000
000111000
et bien ça m'afficherait 4 lignes et 9 caractères par ligne
Le but de la manoeuvre est de faire un zoom*2 au centre de l'image, par exemple ici ça afficherait
111111
001100
donc je pars du haut et je supprime nombre_de_lignes/4, idem en partant du bas, et idem avec les colonnes à gauche et à droite, pour qu'il ne reste que le centre, ensuite je fais en sorte que 0->00 et 1->11.
Bref, merci d'avance !
bonne journée
j'ai un programme à faire et j'aimerai savoir la chose suivante :
j'ai besoin, à partir d'une image au format .pbm ouverte, de compter le nombre de ligne et le nombre de caractères par ligne (à la limite pour ça je fais un picture.length() et je divise ça par le nombre de lignes).
Par exemple, si mon image est :
000111000
000111000
000010000
000111000
et bien ça m'afficherait 4 lignes et 9 caractères par ligne
Le but de la manoeuvre est de faire un zoom*2 au centre de l'image, par exemple ici ça afficherait
111111
001100
donc je pars du haut et je supprime nombre_de_lignes/4, idem en partant du bas, et idem avec les colonnes à gauche et à droite, pour qu'il ne reste que le centre, ensuite je fais en sorte que 0->00 et 1->11.
Bref, merci d'avance !
bonne journée
A voir également:
- Compteur de lignes
- Compteur électrique - Guide
- Compteur de contractions - Télécharger - Santé & Bien-être
- Partage de photos en ligne - Guide
- Comment ralentir un compteur linky forum - Accueil - Objets connectés
- Excel trier par ordre alphabétique en gardant les lignes - Guide
6 réponses
Dans le format de fichier PBM, les dimensions de l'image sont codées en dur au début du fichier, ça ne commence pas directement avec les lignes de pixels.
Ton fichier complet devrait donc être au minimum :
Les valeurs 9 et 4 sont donc immédiates à obtenir !
Ton fichier complet devrait donc être au minimum :
P1 9 4 000111000 000111000 000010000 000111000
Les valeurs 9 et 4 sont donc immédiates à obtenir !
Oui je le sais, mais je pensais simplement faire nombre de lignes total - 2 (pour la ligne du P1, et celle du 9 et du 4) car je pensais que ça serait plus simple que de relever la valeur qui est en x-ème position.
Or, je ne connais pas la valeur de la position de ce nombre de lignes, c'est à dire que dans ton exemple c'est le 5ème caractère (P-1-9- -4) mais si le nombre de caractères par ligne >10 ça décale tout, et si le nombre de ligne >10 idem, ou alors je me retrouve avec une valeur fausse.
Or, je ne connais pas la valeur de la position de ce nombre de lignes, c'est à dire que dans ton exemple c'est le 5ème caractère (P-1-9- -4) mais si le nombre de caractères par ligne >10 ça décale tout, et si le nombre de ligne >10 idem, ou alors je me retrouve avec une valeur fausse.
"je pensais simplement faire nombre de lignes total - 2 (pour la ligne du P1, et celle du 9 et du 4"
Rien ne garanti que le nombre de ligne du fichier correspond à la hauteur de l'image +2. Tu oublies que tu peux avoir des lignes de commentaires dans le fichier, et qu'étant limité à 70 caractères par ligne, si tu as une image plus large tu vas devoir mettre une rangée de pixels sur plusieurs lignes !
"ça serait plus simple que de relever la valeur qui est en x-ème position."
L'intérêt d'avoir ce genre de données au début c'est de pouvoir construire un tableau pour remplir les pixels au fur et à mesure de la lecture. Or la taille du tableau doit être connue à l'avance, sinon tu vas être obligé de lire une première fois le fichier juste pour compter le nombre de lignes, puis une deuxième fois pour lire les pixels (que tu as déjà lu), c'est un peu stupide alors que tu as déjà l'information mise à disposition au départ.
"ton exemple c'est le 5ème caractère (P-1-9- -4) mais si le nombre de caractères par ligne >10 ça décale tout"
Bien sûr que tout es décalé, de toute façon tu seras décalé si le saut de ligne est \n (1 caractère) comme sous Linux, ou \r \n (2 caractères) comme sous Windows.
Mais fort heureusement, tout ça on s'en moque complètement, car on ne lit jamais les fichiers caractères par caractères, parce que sinon on ne s'en sortira jamais !
D'autant que le format de fichier autorise par exemple de mettre des espaces entre les pixels. Ton code devrait donc normalement être suffisamment souple pour autoriser la lecture de ton image comme ceci :
Rien ne garanti que le nombre de ligne du fichier correspond à la hauteur de l'image +2. Tu oublies que tu peux avoir des lignes de commentaires dans le fichier, et qu'étant limité à 70 caractères par ligne, si tu as une image plus large tu vas devoir mettre une rangée de pixels sur plusieurs lignes !
"ça serait plus simple que de relever la valeur qui est en x-ème position."
L'intérêt d'avoir ce genre de données au début c'est de pouvoir construire un tableau pour remplir les pixels au fur et à mesure de la lecture. Or la taille du tableau doit être connue à l'avance, sinon tu vas être obligé de lire une première fois le fichier juste pour compter le nombre de lignes, puis une deuxième fois pour lire les pixels (que tu as déjà lu), c'est un peu stupide alors que tu as déjà l'information mise à disposition au départ.
"ton exemple c'est le 5ème caractère (P-1-9- -4) mais si le nombre de caractères par ligne >10 ça décale tout"
Bien sûr que tout es décalé, de toute façon tu seras décalé si le saut de ligne est \n (1 caractère) comme sous Linux, ou \r \n (2 caractères) comme sous Windows.
Mais fort heureusement, tout ça on s'en moque complètement, car on ne lit jamais les fichiers caractères par caractères, parce que sinon on ne s'en sortira jamais !
D'autant que le format de fichier autorise par exemple de mettre des espaces entre les pixels. Ton code devrait donc normalement être suffisamment souple pour autoriser la lecture de ton image comme ceci :
P1 # commentaire 9 4 # commentaire 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0
Normalement c'est une image que l'on créé nous même donc la question du commentaire ne devrait plus se poser.
"si tu as une image plus large tu vas devoir mettre une rangée de pixels sur plusieurs lignes ! "
Oui, le soucis est là, j'avais complètement zappé ça...du coup l'algorithme que j'ai cité dans le message initial n'est plus valable quoi.
"c'est un peu stupide alors que tu as déjà l'information mise à disposition au départ. "
Oui c'est vrai, mais du coup comment je peux prélever cette information sachant que sa position va varier ?
Finalement peut être que ce que je veux faire est au-delà de mes compétences...
"si tu as une image plus large tu vas devoir mettre une rangée de pixels sur plusieurs lignes ! "
Oui, le soucis est là, j'avais complètement zappé ça...du coup l'algorithme que j'ai cité dans le message initial n'est plus valable quoi.
"c'est un peu stupide alors que tu as déjà l'information mise à disposition au départ. "
Oui c'est vrai, mais du coup comment je peux prélever cette information sachant que sa position va varier ?
Finalement peut être que ce que je veux faire est au-delà de mes compétences...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
En fait c'est relativement simple, car on a des classes comme Scanner qui permettent de lire des entiers directement.
File file = new File("C:/test.bpm"); Scanner sc = new Scanner(file); sc.next(); // lecture de "P1" int w = sc.nextInt(); // lecture de la largeur int h = sc.nextInt(); // lecture de la hauteur ... sc.close();
Du coup pour pas être plus ennuyant sur ce sujet, je vais peut être laisser tomber ça et je vais partir sur un programme pour étirer l'image horizontalement(genre un 0 devient 00, on décale de deux vers la droite, un 1 devient 11 etc...) et verticalement je vois pas trop comment faire, puis à la fin un compteur compte chaque caractère par ligne et si une ligne dépasse 70 caractères bah retour chariot ! ça je sais pas trop comment faire mais j'ai pas encore cherché là ^^
Du coup seule petite question, est-ce que la position du retour chariot est important ? En gros, est-ce que :
c'est l'équivalent de
ou de
ou même de
Du coup seule petite question, est-ce que la position du retour chariot est important ? En gros, est-ce que :
P1 8 1 0 0 0 1 0 0 0 1
c'est l'équivalent de
P1 8 1 0 0 0 1 0 0 0 1
ou de
P1 8 1 0 0 0 1 0 0 0 1
ou même de
P1 8 1 0 0 0 1 0 0 0 1?
Oups désolé j'avais envoyé ce message sans avoir lu ta dernière réponse...
J'ai jamais utilisé "File file = new File("C:/test.bpm");", et pour
Scanner sc = new Scanner(file); ça me met Unhandled exception type FileNotFoundException, donc je suppose que je dois créer une image "test.bpm" à cet emplacement mais ça me met toujours pareil !
et aussi, pourquoi pour "String picturenew = picture.replace('0', '00');" ça me met Invalid character constant ? comment je fais moi pour remplacer mon 0 en double 00?
J'ai jamais utilisé "File file = new File("C:/test.bpm");", et pour
Scanner sc = new Scanner(file); ça me met Unhandled exception type FileNotFoundException, donc je suppose que je dois créer une image "test.bpm" à cet emplacement mais ça me met toujours pareil !
et aussi, pourquoi pour "String picturenew = picture.replace('0', '00');" ça me met Invalid character constant ? comment je fais moi pour remplacer mon 0 en double 00?
J'ai jamais utilisé "File file = new File("C:/test.bpm");"
Comment veux tu lire un fichier si tu n'utilises pas la classe File ?
"je suppose que je dois créer une image "test.bpm" à cet emplacement "
Oui, ou plus simplement changer le chemin pour correspondre à ton fichier.
Remarque : je me suis trompé dans l'extension, normalement ça devrait être .pbm mais à la limite peu importe, c'est le contenu du fichier que l'on regarde...
Tu ne peux pas mettre '00' car ce n'est pas un caractère, mais deux. Il faut donc écrire "00", mais je te conseilles plutôt de mettre des espaces entre les chiffres, se sera plus simple pour la lecture après, ce qui donnerait donc "0 0 "
Comment veux tu lire un fichier si tu n'utilises pas la classe File ?
"je suppose que je dois créer une image "test.bpm" à cet emplacement "
Oui, ou plus simplement changer le chemin pour correspondre à ton fichier.
Remarque : je me suis trompé dans l'extension, normalement ça devrait être .pbm mais à la limite peu importe, c'est le contenu du fichier que l'on regarde...
Tu ne peux pas mettre '00' car ce n'est pas un caractère, mais deux. Il faut donc écrire "00", mais je te conseilles plutôt de mettre des espaces entre les chiffres, se sera plus simple pour la lecture après, ce qui donnerait donc "0 0 "
"Comment veux tu lire un fichier si tu n'utilises pas la classe File ? "
Non mais je veux dire, je ne l'ai jamais fait, c'est la première fois que j'ai besoin de lire un fichier ^^
Pour le ""je suppose que je dois créer une image "test.bpm" à cet emplacement " " c'est ce que j'ai fais, en prenant également soin de corirger l'extension, mais ça ne change rien, ça me met toujours Unhandled exception type FileNotFoundException au niveau du Scanner sc = new Scanner(file)....
Non mais je veux dire, je ne l'ai jamais fait, c'est la première fois que j'ai besoin de lire un fichier ^^
Pour le ""je suppose que je dois créer une image "test.bpm" à cet emplacement " " c'est ce que j'ai fais, en prenant également soin de corirger l'extension, mais ça ne change rien, ça me met toujours Unhandled exception type FileNotFoundException au niveau du Scanner sc = new Scanner(file)....
Au temps pour moi, je n'avais pas fait attention au "Unhandled" ça veut dire que tu dois rajouter un try/catch ou un throws. Voici un code complet :
import java.io.File; import java.io.FileNotFoundException; import java.util.Arrays; import java.util.Scanner; public class PNM { public static void main(String[] args) throws FileNotFoundException { File file = new File("C:/test.pbm"); Scanner sc = new Scanner(file); sc.next(); int w = sc.nextInt(); int h = sc.nextInt(); int[][] tab = new int[w][h]; for (int y=0; y<h; y++) for (int x=0; x<w; x++) tab[x][y] = sc.nextInt(); sc.close(); for (int[] t : tab) System.out.println(Arrays.toString(t)); } }