IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Comment lire une zone précise d'un fichier binaire?


Sujet :

Entrée/Sortie Java

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Points : 79
    Points
    79
    Par défaut Comment lire une zone précise d'un fichier binaire?
    Bonjour,
    Je travaille sur un projet de traitement d'image. Mon problème, c'est que je dois lire un fichier binaire et le traiter. La lecture me prend déjà 5 à 10 bonnes minutes et le traitement à peine moins.

    Pour diminuer le temps de calcul, j'ai décidé de diminuer le volume de données. C'est pourquoi, je voudrai ne sélectionner qu'une partie de mon image (via une interface graphique) et ne traiter que les points sélectionnés (ce qui prendra la forme d'un rectangle pour commencer).

    _____________
    | |
    | |
    | _____ |
    | | | |
    | | A | |
    | |____ | |
    |____________ |
    Comment faire pour ne récuperer que les points qui m'intéresse (la zone A sur le petit dessin) ? J'ai une idée qui serait de se positionner à un certain endroit du fichier et d'avancer en sautant les points qui ne sont pas dans le cadre, mais je ne trouve pas de fonction qui me permette de le faire.

    Merci de votre aide.

    PS : désolé, le schéma ne ressembke pas trop à ce que j'ai tenté de faire, la zone d'edition n'est pas exactement la meme que la zone de visualisation

  2. #2
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    bonjour,

    Je ne sais pas si cela peux t'aider mais il y a une classe qui te permet de te déplacer dans le fichier et de le lire à partir d'un offset donné.

    RandomAccessFile
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Ta technique dépend entièrement du format de l'image choisi. En plus, si c'est un format compressé, t'a pas fini de rigoler
    Quel est le format de l'image ?
    On a besoin de plus d'informations !
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  4. #4
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Points : 79
    Points
    79
    Par défaut
    En fait, ce n'est pas dans l'image que je me balade.
    J'ai une image et un fichier qui pour chaque pixel apporte 3 informations complémentaires. C'est précidement ces données dont j'ai besoin. Je me balade dans ce fichier comme si c'était mon image, mais ce n'est qu'un fichier binaire.

    je vais essayer la classe qu'Alkhan me propose.

  5. #5
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Points : 79
    Points
    79
    Par défaut
    bonjour,
    c'est encore moi.
    J'ai un peu de mal à utiliser la classe RandomAccessFile.
    NetBean n'a pas l'air de connaître et je ne trouve pas dans la doc les packages à importer.
    Pourtant, ca avait l'air pas mal comme fonction le seek.

    Merci

  6. #6
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    bonjour,
    pour netbeans, je ne peut pas d'aider car j'utilise eclipse. A partir du moment ou le jar du jdk est dans le path normalement tu devrais avoir toutes le classes dispo, non ?
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Points : 79
    Points
    79
    Par défaut
    Je tiens à m'excuser... je suis juste un .
    J'avais juste un problème d'argument dans le constructeur (je lui ai passé un inpustream au lieu d'un string).

    J'ai bon espoir que ca marche maintenant.

    merci

  8. #8
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Points : 79
    Points
    79
    Par défaut
    j'ai une question (encore).
    Est ce que l'offset pour la fonction seek se calcule en bits?
    est ce qu'il faut que je lui dise un truc du genre
    ou plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fichier.seek(100*sizeof(short)
    merci

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    seek() est un nombre de bytes. Donc si tu lis des int, tu dois multiplier par 4, si tu lis des short, c'est 2, etc.

  10. #10
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Points : 79
    Points
    79
    Par défaut
    Merci beaucoup.
    Je pense que j'ai tous les éléments dont j'ai besoin pour mon problème.

    sinon, c'est que ma facon de penser n'est sûrement pas la bonne.

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 156
    Points : 190
    Points
    190
    Par défaut
    Une autre petite idée, c'est à propos de la façon de stocker les données, il vaut probablement mieux que tu les stock sous forme de petit rectangle que comme des lignes, cela évitera d'avoir à te déplacer un trop grand nombre de fois dans le fichier.

    Exemple :

    tu as une image 1000x1000, tu veux le rectangle 540,540 à 640,640, il faudra que tu fasse 100 fois appel à l'instruction seek. Si tu as découpé ton espace en rectangle de 50x50, il faudra que tu lise les rectangles :
    • 500,500 à 550,550
    • 550,500 à 600,550
    • 600,500 à 650,550
    • 500,550 à 550,600
    • 550,550 à 600,600
    • 600,550 à 650,600
    • 500,600 à 550,650
    • 550,600 à 600,650
    • 600,600 à 650,650


    Il n'y a plus que 9 déplacement à faire plutôt que 100, pour une image de taille plus importante cela devient plus intéressant. L'inconvénient c'est que ici on lit 2,25 fois plus de données que nécessaire, cela peut tout de même rester plus efficace.

    Utilise aussi plutôt read(byte[], int off, int len ) plutôt que readInt, ce dernier fait 4 fois de suite appel à read() ce qui est plutôt peu efficace.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lire une ligne précise d'un fichier texte
    Par Junta dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 23/04/2009, 18h26
  2. Accès à une zone précise d'un fichier texte
    Par Axwell dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 01/06/2007, 10h20
  3. Comment lire une seul ligne d'un fichier texte?
    Par Julien1987 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 18/01/2007, 13h36
  4. lire une ligne précise d'un fichier
    Par loic_86 dans le forum Langage
    Réponses: 1
    Dernier message: 06/01/2006, 13h37
  5. Comment Lire une valeur à partir d'un fichier XML en C++?
    Par Hamdi Hedhili dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 13/12/2005, 10h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo