Ich habe Code geschrieben, um ein Windows-Bitmap zu lesen und möchte es jetzt mit ltk anzeigen. Wie kann ich ein passendes Objekt konstruieren? Gibt es solche Funktionalität in ltk? Wenn nicht, wie kann ich direkt mit tk kommunizieren?Wie zeige ich ein Bild mit ltk?
Antwort
Es ist schon eine Weile zu finden, da ich LTK für alles verwendet, aber die einfachste Art und Weise zu ein Bild mit LTK Anzeige ist wie folgt:
(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)))))
Leider, was Sie mit dem Bild von Standard tun können, ist ziemlich begrenzt, und man kann nur gif oder ppm Bilder verwenden - aber die ppm file format ist sehr einfach, man konnte leicht Erstellen Sie ein ppm-Bild von Ihre Bitmap. Aber Sie sagen, dass Sie das angezeigte Bild manipulieren möchten, und Blick auf den Code, der das Bild-Objekt definiert:
(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)
Es sieht aus wie die die tatsächlichen Daten für das Bild wird durch die Tcl/Tk-Interpreter gespeichert und nicht zugänglich von innen lisp. Wenn Sie darauf zugreifen möchten, müssten Sie wahrscheinlich eigene Funktionen schreiben, indem Sie format-wish und send-wish verwenden.
Natürlich könnten Sie jeden Pixel einzeln auf einem Canvas-Objekt rendern, aber ich denke nicht, dass Sie eine sehr gute Leistung erzielen würden. Das Canvas-Widget wird langsam langsamer, wenn Sie mehr als ein paar anzeigen möchten tausend verschiedene Dinge drauf. Zusammengefasst: Wenn Sie nichts in Echtzeit machen möchten, können Sie Ihre Bitmap jedes Mal, wenn Sie sie anzeigen wollten, als .ppm-Bild speichern und dann einfach mit dem obigen Code laden - das wäre am einfachsten. Andernfalls könnten Sie versuchen, auf die Daten von tk selbst zuzugreifen (nachdem Sie sie einmal als ppm-Bild geladen haben). Wenn das alles nicht funktioniert, können Sie zu einem anderen Toolkit wechseln. Die meisten dezenten Lisp GUI Toolkits sind für Linux gedacht, daher kann es passieren, dass Sie kein Glück haben, wenn Sie Windows benutzen.
Tk unterstützt Windows-Bitmap-Dateien nicht nativ. Die Erweiterung "Img" ist und ist jedoch auf fast jeder Plattform frei verfügbar. Sie müssen die Daten nicht einlesen, Sie können das Bild direkt aus der Datei auf der Festplatte erstellen. Im Klar Tcl/Tk könnte Ihr Code wie folgt aussehen:
package require Img
set image [image create photo -file /path/to/image.bmp]
label .l -image $image
pack .l
ein wenig mehr Informationen unter http://wiki.tcl.tk/6165
- 1. Zeige ein Bild mit pylab.imshow()
- 2. Wie zeige ich ein Bild als Tool Tipp mit jquery?
- 3. Wie zeige ich ein Bild mit swt in Java?
- 4. Probleme mit ltk (common lisp)
- 5. Wie zeige ich ein farbiges Bild in CALayer auf iOS?
- 6. Wie zeige ich ein Bild auf Jaspis-Bericht?
- 7. Wie zeige ich Bild in Bootstrap-modal mit Javascript
- 8. Zeige ein Bild von Models in Django
- 9. Zeige Fortschritt, ohne ein Bild zu verwenden
- 10. Zeige ein Bild von Android-Client mit Socket gesendet
- 11. Wie zeige ich ein Bild auf HTML-Seite nur mit CSS?
- 12. Wie spiele ich eine Audiodatei ab und zeige gleichzeitig ein Bild mit einem Applet an?
- 13. Ich zeige das Bild nicht in Tkinter
- 14. Zeige hochgeladen Bild mit Spring boot
- 15. Xcode zeige aktuelle Zeit mit Bild
- 16. Zeige Retina-Display Bild mit reinem css
- 17. Wie zeige ich Bild als Tooltip in JavaFX?
- 18. Wie konvertiere ich ein numpliges Array in ein Bild (und zeige es an)?
- 19. Wie bekomme ich die Bildquelle und zeige das Bild?
- 20. Wie zeige ich Bild von mysql an PHP
- 21. Wie lade ich ein Bild mit Javascript
- 22. Wie trenne ich ein Bild mit Wasserzeichen?
- 23. WPF: Wie kann ich ein Bild verwenden, während ich es zeige?
- 24. Wie poste ich ein Bild/Bild mit dem IO Codenameone
- 25. Wie zeige ich ein animiertes GIF in React Native an?
- 26. Zeige Bild in Leaflet Popup
- 27. Wie zeige ich ein Ladesymbol an, während ein Frame navigiert?
- 28. Wie zeige ich ein QImage in einem "funktionalen" Programmierstil an?
- 29. Wie blende ich das Hauptfenster aus und zeige ein Bild über die ganze Seite?
- 30. Wie zeige ich dem Benutzer eine GIF-Animation an, während ein Bild geladen wird (im Web)?
In diesem Fall ist meine Frage: Wie komme ich zu den Daten? Ich möchte einige Bildfilter anwenden. – Sarien