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

Lazarus Pascal Discussion :

Ouvrir des fichiers image au format TIF


Sujet :

Lazarus Pascal

  1. #21
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 299
    Points
    11 299
    Billets dans le blog
    6
    Par défaut
    Salut JP,

    Pour l'amour de la bidouille et satisfaire une pointe de curiosité, que se passe-t-il en remplaçant le morceau de code qui lève l'erreur par if SrcPos+3>Count then Exit(EoiCode); ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  2. #22
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Salut Yves !
    Citation Envoyé par tourlourou Voir le message
    Pour l'amour de la bidouille et satisfaire une pointe de curiosité, (...)
    Toi tu sais utiliser les mots qu'il faut pour obtenir des résultats, bien joué ! ! !

    Alors avant de parler de ta demande, je voulais revenir sur la manière dont cette fonction a été codée :
    dans la principale, dans la boucle "repeat" on trouve ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        repeat
    ...
            if Code=ClearCode then
              Error('LZW code out of bounds');
    ...
            end else
              Error('LZW code out of bounds');
          end;
        until false;
    Comment faire le distingo entre l'erreur au début et l'erreur à la fin ? Je trouve qu'il y a des baffes qui se perdent, d'autant plus que la sous-fonction GetNextCode répète ce schéma minable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      begin
    ...
          // read from three bytes
          if SrcPos+3>Count then Error('LZW stream overrun');
    ...
        end else begin
          // read from two bytes
          if SrcPos+2>Count then Error('LZW stream overrun');
    ...
    Je ne sais pas comment ils ont réussi à débugguer leur truc, avec ce genre de message.

    C'est pour ça qu'une de mes premières manips a été de différencier ces deux erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
          // read from three bytes
          if SrcPos+3>Count then Error('(a)-LZW stream overrun '+IntToStr(SrcPos)+'--'+IntToStr(Count));
    ...
          // read from two bytes
          if SrcPos+2>Count then Error('(b)-LZW stream overrun');
    Bon, ta petite demande...
    Juste pour faire durer le suspense, je précise que j'avais aussi un peu joué avec, à savoir que j'avais simplement mis en commentaire la ligne du premier test if SrcPos+3>Count then, auquel cas ça partait en erreur sur le test suivant (au tour d'après il me semble), if SrcPos+2>Count then, et qu'en commentant également ce test j'avais l'erreur dans la fonction appelante, Error('LZW code out of bounds');Mais laquelle des deux ? Ça m'a tellement gonflé que j'ai laissé tombé.

    Bon, j'aurais peut-être dû attendre cet après-midi et... ta petite demande car, aussi incroyable que ça paraisse, hé bien... ça... fonctionne !
    Plus d'erreur, l'image de mon fichier est correctement affichée, !
    Et les onze autres fichiers (qui n'ont jamais posé problème) confirment que c'est tout bon.

    Alors, à quoi servent ces deux tests ?
    Je t'avoue que j'ai remplacé en une seule fois les deux tests par tes exit magiques et que j'ai la flemme de tester juste l'un puis juste l'autre.

    Qu'est-ce qui t'est passé par la tête ? Qu'est-ce qui t'a donné l'idée de tester comme ça ?
    La lecture des spéc's Tiff 6.0 ?
    Me semble y avoir lu que les fonctions en cas d'erreur devaient terminer "gracefully", est-ce ce qu'on accomplit avec tes exit ?

    En tout cas, bien, très bien joué, Yves !

    La question, maintenant, c'est : est-ce qu'on fait remonter cette infos aux dév's de FreePascal ? Faudrait que je leur envoie mon fichier à problème, qui pèse quand même 16 Mo incompressibles.

    Bon week-end,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #23
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 299
    Points
    11 299
    Billets dans le blog
    6
    Par défaut
    C'est un coup de pot, plutôt !

    Je n'ai pas relu TIFF 6.0 mais ça permet de remplacer l'erreur par une fin de fichier.

    Il semble donc que ton fichier ne soit pas bien fini...

    Le décodeur (pas les autres qui traitent pê gracefully) ici présent attend donc un code de 9 à 12 bits qui se situe à cheval sur 2 ou 3 octets, le dernier après la fin du stream !

    Je ne sais pas si c'est un défaut d'encodage ou de décodage, en levant une exception qui aurait dû être gérée.

    Parfois, l'intuition a du bon (et surtout, les données de débogage que tu as fournies).

    Sinon, pour ton autre question, c'est pour gérer les codes en dehors de la table ou la succession de 2 ClearCode.

    Bon week-end
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

Discussions similaires

  1. Ouvrir des fichiers de différents formats
    Par Abou Zar dans le forum Composants VCL
    Réponses: 20
    Dernier message: 01/05/2012, 09h50
  2. Inclure des images au format tif
    Par Erlen dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 13
    Dernier message: 31/03/2010, 21h53
  3. ouvrir des fichiers tif 3d
    Par svagrim dans le forum Traitement d'images
    Réponses: 5
    Dernier message: 29/08/2007, 11h21
  4. Ouvrir un fichier image / Webutil
    Par cyrilm dans le forum Forms
    Réponses: 6
    Dernier message: 19/10/2005, 13h50
  5. compression d'image au format .tif
    Par sasaki dans le forum ASP
    Réponses: 2
    Dernier message: 09/08/2005, 09h39

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