J'ai écrit du code pour lire un bitmap Windows et voudrais maintenant l'afficher avec ltk. Comment puis-je construire un objet approprié? Y at-il une telle fonctionnalité dans ltk? Sinon comment puis-je le faire directement en interfaçage avec tk?Comment afficher une image avec ltk?
Répondre
Il a été un moment que je LTK pour quoi que ce soit, mais le moyen le plus simple de afficher une image avec LTK est la suivante:
(defpackage #:ltk-image-example
(:use #:cl #:ltk))
(in-package #:ltk-image-example)
(defun image-example()
(with-ltk()
(let ((image (make-image)))
(image-load image "testimage.gif")
(let ((canvas (make-instance 'canvas)))
(create-image canvas 0 0 :image image)
(configure canvas :width 800)
(configure canvas :height 640)
(pack canvas)))))
Malheureusement ce que vous pouvez faire avec l'image par défaut est assez limitée, et vous ne pouvez utiliser des images GIF ou ppm - mais le ppm file format est très simple, vous pouvez facilement créer une image ppm à partir de votre bitmap. Cependant, vous dites que vous voulez manipuler l'image affichée, et en regardant le code qui définit l'objet d'image:
(defclass photo-image(tkobject)
((data :accessor data :initform nil :initarg :data)
)
)
(defmethod widget-path ((photo photo-image))
(name photo))
(defmethod initialize-instance :after ((p photo-image)
&key width height format grayscale data)
(check-type data (or null string))
(setf (name p) (create-name))
(format-wish "image create photo [email protected][ -width ~a~][email protected][ -height ~a~][email protected][ -format \"~a\"~][email protected][ -grayscale~*~][email protected][ -data ~s~]"
(name p) width height format grayscale data))
(defun make-image()
(let* ((name (create-name))
(i (make-instance 'photo-image :name name)))
;(create i)
i))
(defgeneric image-load (p filename))
(defmethod image-load((p photo-image) filename)
;(format t "loading file ~a~&" filename)
(send-wish (format nil "~A read {~A} -shrink" (name p) filename))
p)
Il semble que les données réelles de l'image est stockée par l'interpréteur Tcl/Tk et non accessible de l'intérieur de lisp. Si vous voulez y accéder, vous devrez probablement écrire vos propres fonctions en utilisant format-souhaiter et envoyer-souhaiter.
Bien sûr, vous pouvez simplement rendre chaque pixel individuellement sur un objet canvas, mais je ne pense pas que vous obtiendriez de très bonnes performances, le widget canvas devient un peu lent lorsque vous essayez d'afficher plus de mille choses différentes à ce sujet. Donc, pour récapituler - si vous ne faites rien en temps réel, vous pouvez enregistrer votre bitmap comme une image .ppm chaque fois que vous voulez l'afficher et ensuite simplement le charger en utilisant le code ci-dessus - ce serait le plus facile. Sinon, vous pourriez essayer d'accéder aux données de tk lui-même (après l'avoir chargé une fois comme une image ppm), enfin si rien de tout cela ne fonctionne, vous pouvez passer à une autre boîte à outils. La plupart des toolkits d'interface graphique de lisp décent sont pour linux, ainsi vous pouvez avoir de la chance si vous utilisez Windows.
Tk ne prend pas en charge nativement les fichiers bitmap Windows. Cependant, l'extension "Img" est disponible gratuitement sur presque toutes les plates-formes. Vous n'avez pas besoin de lire les données, vous pouvez créer l'image directement à partir du fichier sur le disque. Dans tcl/tk plaine votre code pourrait ressembler à ceci:
package require Img
set image [image create photo -file /path/to/image.bmp]
label .l -image $image
pack .l
un peu plus d'informations sont disponibles sur http://wiki.tcl.tk/6165
- 1. Comment utiliser WindowsPhotoGallery pour afficher une image gif avec Java?
- 2. Comment afficher une image en flex avec Content-Type: image/jpeg?
- 3. Afficher une image ou un UIImage avec un Calayer uni
- 4. Comment obtenir Ltk pour afficher ce que l'utilisateur écrit et ce que les fonctions impriment?
- 5. Comment afficher une partie d'une image en utilisant jquery?
- 6. Comment afficher une image dynamiquement redimensionnée dans Kohana sans l'enregistrer?
- 7. Comment afficher une image au centre de la page entière avec jQuery?
- 8. Comment lier jQuery redimensionnable avec une image?
- 9. Comment rendre une image avec OpenGL ES?
- 10. Contrôle personnalisé pour afficher une image: déplacer l'image à l'intérieur
- 11. ASP.Net MVC Comment afficher une propriété image d'un modèle dans une vue?
- 12. Comment puis-je afficher une image bitmap dans une applet Java?
- 13. Comment rendre une image avec map avec JSF/Richfaces?
- 14. Comment obtenir une image avec son nom et une extension?
- 15. jQuery onchange/onfocus sélectionnez la case pour afficher une image?
- 16. Afficher l'image de l'objet IMAGE dans MVC
- 17. Comment estomper une image?
- 18. Comment redimensionner une image?
- 19. Afficher d'énormes images défilantes dans Image?
- 20. Comment afficher une image dans une div fixe pour créer un panneau d'image défilable?
- 21. Comment masquer une image carrée dans une image avec des coins arrondis dans le SDK iPhone?
- 22. Comment afficher une table avec une source de données XML?
- 23. Trouver une image dans une image C#
- 24. Comment afficher une image à partir d'une base de données dans MVC
- 25. Comment ajoutez-vous une image?
- 26. Télécharger une image avec l'API facebook
- 27. Afficher avec une colonne en lecture seule
- 28. Accéder à une image dans une image
- 29. Comment travailler avec une image en utilisant l'URL dans Android?
- 30. Comment concaténer des icônes en une seule image avec ImageMagick?
Dans ce cas, ma question est: Comment puis-je accéder aux données? Je voudrais appliquer des filtres d'image. – Sarien