我已經編寫了讀取Windows位圖的代碼,現在想用ltk顯示它。我怎樣才能構建一個合適的對象? ltk中是否有這樣的功能?如果不是,我怎麼能直接連接到tk呢?如何用ltk顯示圖像?
4
A
回答
3
發現它已經有一段時間,因爲我用LTK任何東西,但最簡單的方法顯示與LTK的圖像如下:
(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)))))
不幸的是,你可以使用默認的圖像做的是相當有限的,你只能使用GIF或ppm圖像 - 但是很簡單的,你可以很容易從中創建一個ppm圖像你的位圖。但是你說你要操縱所顯示的圖像,並期待在定義圖像對象的代碼:
(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)
它看起來像該圖像的實際數據被Tcl/Tk解釋和無法訪問存儲從lisp內部。如果你想訪問它,你可能需要使用format-wish和send-wish來編寫自己的函數。
當然,您可以簡單地在畫布對象上單獨渲染每個像素,但我不認爲這樣做會獲得非常好的性能,一旦嘗試顯示更多的畫布,畫布窗口部件會變得有點慢上千種不同的東西。所以總結一下 - 如果你不關心實時做什麼,你可以將你的位圖保存爲.ppm圖像,每次你想顯示它,然後使用上面的代碼加載它 - 這將是最簡單的。否則,您可以嘗試從tk本身訪問數據(在將其作爲ppm圖像加載一次之後),最後如果沒有任何作用,您可以切換到另一個工具包。大部分像樣的lisp GUI工具包都是針對linux的,所以如果你使用的是windows,你可能會失敗。
2
Tk本身不支持Windows位圖文件。但是,「Img」擴展可以在幾乎每個平臺上自由使用。您不需要讀取數據,您可以直接從磁盤上的文件創建映像。在普通的Tcl/Tk您的代碼可能是這個樣子:
package require Img
set image [image create photo -file /path/to/image.bmp]
label .l -image $image
pack .l
一點的更多信息可以在http://wiki.tcl.tk/6165
相關問題
- 1. 顯示標籤:如何使用顯示標籤顯示圖像
- 2. 如何顯示該圖像?
- 3. 圖像如何顯示?
- 4. express.js如何顯示圖像?
- 5. Skimage:如何顯示圖像
- 6. WEBGL - 如何顯示圖像?
- 7. 如何顯示在圖像
- 8. 如何顯示圖像
- 9. 如何顯示圖像Codeigniter
- 10. 如何顯示圖像?
- 11. 我如何顯示圖像?
- 12. SimpleCursorAdapter如何顯示圖像?
- 13. 使圖像顯示...如何?
- 14. 如何在內容沒有圖像時顯示圖像並在顯示圖像時顯示圖像
- 15. 如何使用嚮導顯示圖像
- 16. 如何使用Javascript顯示圖像?
- 17. 如何使用XML顯示圖像?
- 18. 如何使用php顯示圖像?
- 19. 如何使用kivy顯示圖像
- 20. 如何使用c顯示圖像?
- 21. 如何使用Xcode顯示圖像
- 22. 如何使用MVC 4顯示圖像?
- 23. 如何用pygame顯示PIL圖像?
- 24. 如何用php顯示圖像?
- 25. 如何使用web.py顯示圖像
- 26. 如何使用WebView來顯示圖像
- 27. 如何用Perl顯示圖像
- 28. 如何使用函數顯示圖像?
- 29. 如何使用OpenCV顯示PGM圖像
- 30. 如何使用typeahead.js顯示圖像?
在這種情況下,我的問題是:如何獲得數據?我想申請一些圖像過濾器。 – Sarien 2008-09-17 08:13:08