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

Free Pascal Discussion :

Erreur exitcode 217 lors de la conversion d'une image en tableau


Sujet :

Free Pascal

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Erreur exitcode 217 lors de la conversion d'une image en tableau
    Bonjour à tous!

    Voilà mon problème est simple: après plusieurs tâtonnements j'ai réussi à trouver un bout de code pour convertir une image bmp en tableau.
    Seulement voilà après avoir enlever les erreurs de compilation, le lancement du programme me conduit inexorablement à un message d'erreur:
    "program {chemin}\essai2.exe exited with exitcode = 217"

    voici le code source:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    program essai;
     
    uses sysutils;
     
    const lo=69;{longueur de l'image source en pixels}
         la=107;{largeur de l'image source en pixels}
         p=58;{pas de detection des droites}
         p_rho=1;{pas de tolérance pour l'angle theta}
         p_theta=1;{pas de tolérance pour la logueur rho}
     
     
     
     
     
    type
      image=array[1..lo,1..la] of integer;
     
     
    var
      Chemin : String;
      s: string;
      k1,k2 : Integer;
      Fichier : Text;
      Ligne : String;
      im1 : image;
     
     
     
    procedure Convertir(Chemin:string;t:image);
    var Fichier:Text;
    	k,r,i,e:integer;
    begin
    Assign(Fichier,chemin);
    reset(Fichier);
    while not eof(Fichier) do
        begin
          readln(Fichier,Ligne);
          readln(Fichier,Ligne);
          readln(Fichier,Ligne);
          readln(Fichier,Ligne);
          for k := 1 to la do
            begin
              for r := 1 to lo do
                begin
                  readln(Fichier,Ligne);
                  val(Ligne,i,e);
                  if i>0 then t[k,r]:=1;
                end;
              {/Rof}
            end;
          {/Rof}
        end;
       {/Elihw}
      end;
     
    begin
    Convertir('C:\joli.bmp',im1);
    for k1:=0 to lo do
    	begin
    	for k2:=0 to la do
                    begin
                    str(im1[k1,k2],s);
                    write(' '+s)
                    end;
    	writeln();
    	end;
    readln();
     
    end.
    Bien sûr je ne suis pas tenu d'utiliser ce bout de code alors si vous connaissez un moyen efficace et fonctionnel (en tous cas plus que celui-ci )de convertir une image en tableau je suis preneur!

    Merci d'avance!

  2. #2
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 417
    Points
    59 417
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Une exception est manifestement déclenchée. Ton programme tourne sans erreur d'exécution chez moi (testé avec plusieurs bitmaps, jusqu'à 640x480 pixels pesant 1 Mb). Es-tu certain du chemin d'accès vers l'image ?

    As-tu essayé de debugguer ton programme ?
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Malheureusement le chemin d'accès semble correct: j'ai même placé le fichier source à la racine du disque mais rien y fait...
    Déjà si le programme marche chez toi c'est déjà un bon point!
    Tu l'as utilisé tel quel ou tu as dû faire des modifications? (même bénignes, il se peut que j'ai fait une erreur toute bête)
    Je ne sais pas debugger un programme avec FreePascal:est-ce qu'il y une possibilité de l'exécuter ligne par ligne?

  4. #4
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 417
    Points
    59 417
    Billets dans le blog
    2
    Par défaut
    Je n'ai fait aucune modification, si ce n'est la taille et le nom de l'image.

    Un conseil : télécharge la dernière version en date de l'EDI Free Pascal, il se peut que tu travailles avec une ancienne version.

    Pour déboguer ton programme, tu peux mettre des points d'arrêt dans ton code à l'aide de Ctrl-F8 et exécuter le programme à l'aide de Ctrl-F9. Chaque fois qu'un point d'arrêt est atteint, tu retournes automatiquement dans l'éditeur, où tu peux, par exemple, regarder la valeur de certaines variables (en tapant Ctrl-F7, tu crées une fenêtre dans laquelle tu peux les surveiller). Pour poursuivre l'exécution du programme jusqu'au point d'arrêt suivant, tu tapes Ctrl-F9.
    Les touches F7 et F8 permettent d'exécuter le programme pas à pas ou bloc à bloc.

    N.B. Je n'ai regardé que l'aspect exécution du programme. Car je pense que le résultat obtenu ne correspond pas vraiment au contenu de l'image. Il y a sûrement des corrections à faire à ce niveau.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bon j'ai réussi à faire disparaitre l'erreur à l'exécution en utilisant Dev-Pascal.Il s'agit peut être de ma version de Free-Pascal donc...Pourtant la version 2.2.4 est bien la dernière non?et Dev-Pascal fonctionne bien avec le compilateur Free-Pascal?
    Parce que le résultat du programme n'est pas vraiment celui escompté...
    Est-ce qu'il y a un moyen de convertir une image (en noir et blanc) en tableau de 0 et de 1? parce que visiblement cette méthode ne marche pas et le but de mon projet n'est pas de me débattre avec l'implantation de l'algorithme (de traitement d'image) mais surtout en la conception de l'algorithme lui-même...
    Mais si je ne peut pas l'implanter je ne peut pas en tester ses caractéristiques avec des exemples...

  6. #6
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 417
    Points
    59 417
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par _Hope_ Voir le message
    Bon j'ai réussi à faire disparaitre l'erreur à l'exécution en utilisant Dev-Pascal.Il s'agit peut être de ma version de Free-Pascal donc...Pourtant la version 2.2.4 est bien la dernière non?et Dev-Pascal fonctionne bien avec le compilateur Free-Pascal?
    Dev-Pascal est fourni est avec un compilateur Free Pascal antédiluvien. Puisque tu as installé la version 2.2.4, il faut aller modifier les chemins dans les options de Dev-Pascal pour qu'il travailler avec cette version et non avec le compilateur d'origine.

    Citation Envoyé par _Hope_ Voir le message
    Parce que le résultat du programme n'est pas vraiment celui escompté...
    En effet. L'en-tête du fichier est constitué des champs suivants :
    • 2 octets pour la signature
    • 4 octets pour la taille du fichier
    • 4 octets inutilisés
    • 4 octets indiquant l'endroit où se situe l'image elle-même

    C'est ce dernier champ qui est important pour toi. C'est le n° de l'octet où commence l'image proprement dite dans le fichier.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Ok donc j'ai réécrit la procédure de lecture du fichier .bmp mais je tombe sur un autre problème: j'ouvre donc le fichier comme un fichier binaire et je lis les 4 octets qui m'intéressent mais comment puis-je les convertir en base 10?
    j'ai fais des tests avec la fonction FileSize() mais je n'arrive pas à tomber sur la même taille en octets...la fonction ReadBlock retourne des blocs en base 256?

    exemple:
    filesize retourne 8530 octets
    et mes blocs sont:
    n°3:82
    n°4:33
    n°5:0
    n°6:0

    Étant donné que l'adresse de l'image contenu dans les 4 octets sont dans cette base il faut que je puisse en faire des décimaux pour utiliser la fonction seek...

  8. #8
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Il faut en fait lire "à l'envers"... Pour comprendre, jette un oeil ici: http://en.wikipedia.org/wiki/BMP_fil..._24-Bit_Bitmap

    Si tu obtiens 82 et 33, ton calcul devient:
    33 * 256 + 82 = 8530
    Ou équivalent : 0 SHL 24 + 0 SHL 16 + 33 SHL 8 + 82 = 8530

    Sinon tu peux lire directement un word, au lieu d'un byte, mais attention à la façon de stocker les données (little ou big endian). Le plus simple est de lire un à un les octets je pense...
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/01/2012, 15h46
  2. Erreur de syntaxe lors de la conversion d'une valeur datetime
    Par info3licen dans le forum Débuter avec Java
    Réponses: 10
    Dernier message: 28/05/2011, 01h31
  3. [GD] Erreur lors de la miniaturisation d'une image jpeg
    Par PierreBTSIG dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 18/06/2008, 16h00
  4. Problème transparence lors de la conversion d'une image
    Par Riki dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 20/11/2007, 12h33
  5. Erreur lors de la conversion d'une requête SELECT en DELETE
    Par SamLeChiseuji dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 11/07/2007, 15h09

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