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

Lisp Discussion :

Images sur Lispworks


Sujet :

Lisp

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Consultant EPM
    Inscrit en
    Décembre 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant EPM

    Informations forums :
    Inscription : Décembre 2013
    Messages : 16
    Points : 9
    Points
    9
    Par défaut Images sur Lispworks
    Bonjour bonjour,

    Je viens demander de l'aide à la communauté de developpez.net car je suis relativement perdu.
    Pour résumer : J'ai pour objectif de faire du traitement d'image en LISP sur LispWorks.
    Problème : Je découvre entièrement le langage.
    J'ai (je pense) compris globalement comment fonctionne le langage. J'ai regardé dans la bibliothèque (que voici : http://www.lispworks.com/documentati...ront/index.htm) pour voir si je trouvais de quoi m'aider.
    J'ai pas mal lu la chose, découvert quel fonction utiliser (load, open ou encore with-open-file), mais étant un novice dans ce langage, je n'arrive pas à les utiliser. J'ai essayer de chercher via google l'ouverture d'image sur ce logiciel mais je n'ai trouvé que des résultats d'ouverture de fichier txt.
    Est-ce que quelqu'un aurait la bonté d'aider ce novice que je suis ?

    Merci d'avance !

  2. #2
    Membre actif
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2013
    Messages : 152
    Points : 275
    Points
    275
    Par défaut
    Common Lisp est un langage d'usage général, et évidemment il n'a aucuns instruments spécifiques de traitement des images integrés dans le langage même. Le macro WITH-OPEN-FILE (qui est l'interface préferé à OPEN) permet de travailler entre autres avec des fichiers binaires. En plus, il y a des bibliothèques:
    http://quickdocs.org/
    (voir « Graphics »). On les installe à l'aide de quicklisp.

    Il y a plusieures réalisations de Common Lisp qui fournissent des extensions. Les bibliothèques sont généralement plus ou moins portables. On dit que Lispworks n'est pas mauvais, alors tout doit y fonctionner. (Personnellement, je n'utilise que des réalisations libres.)

    Je suis surpris que un débutant commence par un domaine si spécifique sans aucune connaissance du langage. Si c'est ça ce que tu veux (et non Autocad ni script-fu en GIMP), je peux, peut-être, t'aider avec quicklisp, etc., bien que je n'aie pas d'expérience avec les images. Dans ce cas il vaut mieux que tu expliques ce que tu as l'intention d'accomplir.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Consultant EPM
    Inscrit en
    Décembre 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant EPM

    Informations forums :
    Inscription : Décembre 2013
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Mon problème n'est pas tant le traitement d'image. Tout ce qui est traitement d'image, j'ai déjà pu le pratiquer avec d'autre outils (Scilab par exemple), donc je saurais faire le traitement dont j'ai besoin.
    Mon problème est juste que je ne sais pas insérer une image dans un programme LISP sous forme de tableau 2 dimensions (ou d'une autre façon utilisable).
    A partir du moment où j'aurais les données de l'image utilisables, j'ai des idées qui me permettraient de faire le tout.

  4. #4
    Membre actif
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2013
    Messages : 152
    Points : 275
    Points
    275
    Par défaut
    De quel format s'agit-il? Les formats courants (JPG, PNG, etc.) sont binaires, alors des chaînes de bytes plutôt que des tableaux bidimensionnels.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Consultant EPM
    Inscrit en
    Décembre 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant EPM

    Informations forums :
    Inscription : Décembre 2013
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    C'est un format jpg.

  6. #6
    Membre actif
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2013
    Messages : 152
    Points : 275
    Points
    275
    Par défaut
    Ben, il paraît qu'il n'y a pas encore de bibliothèques pour JPG. On peut ouvrir un tel fichier comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    (with-open-file (in #p"/path/to/file.jpg"
                        :direction :input
                        :element-type '(unsigned-byte 8))
      ...)
    et l'on peut par exemple lire le fichier byte par byte à l'aide de (read-byte in) dans le corps du macro. En théorie, ça suffit si tu te débrouilles dans le format JPG, mais ça doit être un peux laborieux. A propos, le fameux livre « Practical Common Lisp » contient deux ou trois chapitres consacrés aux fichiers binaires, mais il ne sont pas les premiers.

    En revanche, il y a quelque chose à propos de PNG:
    http://www.xach.com/lisp/zpng/
    https://github.com/Ramarren/png-read
    Pour installer des bibliothèques on utilise pour la plupart quicklisp, qui est une espèce de gestionnaire de paquets. Pour installer quicklisp même, il suffit télécharger un seul fichier et le charger dans lisp.
    https://www.quicklisp.org/beta/
    Lorsque le quicklisp est installé, on peut charger des bibliothèques avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (ql:quickload "somelib")
    et quicklisp charge la bibliothèque avec toutes ses dépendances dans lisp en téléchargeant ce qui manque. En plus, on peut créer des bibliothèques locales et les charger les aussi à l'aide de quicklisp; il suffit de placer un symlink à la bibliothèque dans ~/quicklisp/local-projects/. C'est très utile.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Consultant EPM
    Inscrit en
    Décembre 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant EPM

    Informations forums :
    Inscription : Décembre 2013
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Eh bien je te remercie grandement pour ton aide !
    Je vais checker un peu tout ça et voir si j'y arrive avec les byte ou en transformant mon JPG en PNG.
    Encore merci beaucoup, j'ai de la lecture qui va m'attendre je pense.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Consultant EPM
    Inscrit en
    Décembre 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant EPM

    Informations forums :
    Inscription : Décembre 2013
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Je reviens vers vous pour de l'aide !
    Je n'arrive pas à comprendre à partir de quand j'insère mon fichier. J'ai cru comprendre que le :image-data servait à ça mais je ne sais pas comment l'utiliser.
    Voici ce que j'ai pour l'instant (je galère pas mal à avancer)

    Nom : Capture.JPG
Affichages : 263
Taille : 37,0 Ko

    Je devine qu'il y a pas mal d'erreur. Ayez pitié pour un pur newbie

  9. #9
    Membre actif
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2013
    Messages : 152
    Points : 275
    Points
    275
    Par défaut
    Tu l'as testé dans REPL, n'est-ce pas ? Si tu obtiens des messages d'erreur que tu n'arrives pas a comprendre, il vaut mieux les citer ici.

    De toute façon, il n'est pas clair qu'est-ce que tu es en train de faire, quelles bibliothèques tu utilises et même si tu as proprement importé les symbols. Car il est évident que ce fragment ne peut pas être le début d'un programme.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Consultant EPM
    Inscrit en
    Décembre 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant EPM

    Informations forums :
    Inscription : Décembre 2013
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Pour l'instant :
    J'utilise la bibliothèque zpng et le but actuel est juste d'ouvrir un png (nommé Billes) pour faire du traitement dessus plus tard.
    La ligne "image-data :"Billes.png" reporte une erreur cette erreur : #\" is an illegal character after a colon. (donc j'en conclue que c'est une autre écriture mais je n'ai pour l'instant trouvé aucune explications dessus)
    Ensuite je me retrouve avec cette erreur quand je retire l'image-data :
    End of file while reading stream
    #<STREAM::LATIN-1-FILE-STREAM
    Chemin d'accès du fichier lisp>

  11. #11
    Membre actif
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2013
    Messages : 152
    Points : 275
    Points
    275
    Par défaut
    Bon, c'est, évidemment, à cause d'un deux-points suivi d'un guillemet. :"billes.png", qu'est-ce que c'est ? Le deux-points a une signification spéciale: par exemple, il sert pour indiquer manifestement le paquet ou fait partie des keywords. Les chaînes sont designées par guillemets sans deux-points. Une chaîte peut être employée comme le nom d'un fichier; autrement on peut utiliser la notation des pathnames : #p"billes.png".

    Je ne peux pas copier et coller le code pour vérifier les parenthèses, alors j'espère qu'elles sont balancées.

  12. #12
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par Okamasu Voir le message
    Nom : Capture.JPG
Affichages : 263
Taille : 37,0 Ko

    Je devine qu'il y a pas mal d'erreur. Ayez pitié pour un pur newbie
    Regarde bien les couleurs des parenthèses!
    Tu utilises un éditeur manifestement suffisamment sympa pour te montrer (via les couleurs) quelles parenthèses ouvrantes et fermantes se correspondent.
    En plus, l'indentation semble correcte (du point de vue de l'éditeur).

    Je remarque que la 2ème parenthèse à la fin du (max 255)) ferme le (let*.

    Conclusion: il y a une fermante en trop après le :height 149.

    Si tu l'enlèves, ça devrait déjà aller mieux.

    Et merci de copier/coller les messages d'erreur.

    PS: pour recevoir une aide plus efficace, il vaudrait mieux que tu copies le code non sous forme d'image, mais plutôt sous forme de texte, en utilisant la balise CODE (cliquer sur le bouton "#").

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Consultant EPM
    Inscrit en
    Décembre 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant EPM

    Informations forums :
    Inscription : Décembre 2013
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    J'utilise LispWork comme éditeur.
    Et j'ai remarqué en effet la parenthèse que j'avais oublié après le height.
    Donc voici le code un peu modifié.
    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
    (defun Programme (file)
      (let* ((png (make-instance 'png 
                                :color-type :grayscale
                                :width 240
                                :height 149
                                :image-data :#p"billes.png"))
        (image (data-array png))
        (max 255))
        (with-open-file (stream file
                                :direction :output
                                :if-exists :supersede
                                :if-does-not-exist :NIL
                                :element-type '(unsigned-byte 8))
          (start-png png stream)))
    )
    Et voici le seul message d'erreur que j'ai :
    MAKE-INSTANCE 'PNG is called with unpaired keyword in initargs: (:COLOR-TYPE :GRAYSCALE :WIDTH 240 :HEIGHT 149 :IMAGE-DATA :\#P "billes.png")

  14. #14
    Membre actif
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2013
    Messages : 152
    Points : 275
    Points
    275
    Par défaut
    > :#p"billes.png"
    Le deux-point.

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Consultant EPM
    Inscrit en
    Décembre 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant EPM

    Informations forums :
    Inscription : Décembre 2013
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Ohhh...Merci beaucoup c'était ça.
    Bon ben il ne me reste plus qu'à faire mon traitement de donnée dessus du coup.
    Étant donné que c'est un traitement de donnée que j'avais déjà fait il y a un moment dans un autre langage, je vais essayer de l'adapter et ça ne devrait pas trop me poser de problème.
    Encore merci à vous, et sinon si vous avez des liens pour des cours ou autre sur le LISP je vous en serai très reconnaissant. Le langage m'a l'air bien intéressant avec son système, mais je n'ai personne autour de moi qui s'y connaisse.

  16. #16
    Membre actif
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2013
    Messages : 152
    Points : 275
    Points
    275
    Par défaut
    Si tu veux, tu peux présenter ton code pour voire si c'est possible de le rendre plus idiomatique.

    Quant'aux ressources, moi, j'ai lu Practical Common Lisp par Siebel, ANSI Common Lisp et On Lisp par Graham, Let Over Lambda par Hoyte (mais je n'en ai lu aucun entièrement). Il y a d'autres livres telles comme PAIP par Norvig, Successful Lisp par exemple. Mais c'est en forgeant que l'on devient forgeron.

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Consultant EPM
    Inscrit en
    Décembre 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant EPM

    Informations forums :
    Inscription : Décembre 2013
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Pour ce qui est de mon code, il faut encore que je le retrouve, et c'est plus des notions. En gros c'est trouver et compter les billes sur une image.

    Eh ben...Cela va me faire pas mal de lecture ! Je vais essayer de prendre le temps de lire le maximum possible.
    Merci beaucoup encore

  18. #18
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par byjav Voir le message
    > :#p"billes.png"
    Le deux-point.
    Tu as vu la rapidité de la réponse lorsque tu donnes le message d'erreur?

  19. #19
    Futur Membre du Club
    Homme Profil pro
    Consultant EPM
    Inscrit en
    Décembre 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant EPM

    Informations forums :
    Inscription : Décembre 2013
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Oui et je vous en remercie énormément

Discussions similaires

  1. Traitements d'image sur PNG avec transparence
    Par Ingham dans le forum Langage
    Réponses: 16
    Dernier message: 02/08/2004, 16h42
  2. [VB.NET] Image sur un boutton
    Par seemax dans le forum Windows Forms
    Réponses: 4
    Dernier message: 04/06/2004, 09h38
  3. [VB6]Existence d'un image sur un control
    Par oazar dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/04/2004, 17h00
  4. [VB6] mettre une image sur un boutton
    Par dim dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 15/02/2004, 01h28
  5. [TP]Help pour insertion d'un image sur tp7 svp !
    Par ilym dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 21/01/2004, 21h00

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