2008-09-16 5 views
4

私はWindowsのビットマップを読むためのコードを書いていますが、これをltkで表示したいと考えています。適切なオブジェクトを構築するにはどうすればよいですか? ltkにそのような機能はありますか?どうすればtkに直接接続できますか?ltkで画像を表示するにはどうすればよいですか?

答えて

3

で発見することができます

package require Img 
set image [image create photo -file /path/to/image.bmp] 
label .l -image $image 
pack .l 

が、最も簡単な方法へ:平野Tcl/Tkであなたのコードは次のようになります。あなたが簡単にできますが、​​は非常に簡単です - あなたは、デフォルトでは画像で何ができるか残念ながら

(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の画像を使用することができます。以下のようにLTKとのイメージがある表示からの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の中から。アクセスしたい場合は、おそらくフォーマットを使用して独自の関数を書く必要があります。send-wishを願うでしょう。

もちろん、各ピクセルを個別にキャンバスオブジェクトにレンダリングすることはできますが、パフォーマンスは非常に良いとは思いません。キャンバスウィジェットは少々遅く表示しようとすると少し遅くなりますそれに何千もの異なるものがあります。まとめると、リアルタイムで何かを気にしなければ、ビットマップを表示するたびにビットマップを.ppmイメージとして保存し、上記のコードを使用して簡単に読み込むことができます。これが最も簡単です。それ以外の場合は、tk自体のデータにアクセスすることができます(ppmイメージとして一度読み込んだ後)、最後にそのツールがない場合は別のツールキットに切り替えることができます。まともなlisp GUIツールキットのほとんどはLinux向けですので、ウィンドウを使用している場合は不運になる可能性があります。

2

Tkは、Windowsビットマップファイルをネイティブにサポートしていません。ただし、「Img」拡張機能は、ほぼすべてのプラットフォームで自由に利用できます。データを読み込む必要はなく、ディスク上のファイルから直接画像を作成することができます。もう少し情報が、私は何のためにLTKを使用するのでそれはしばらくしているhttp://wiki.tcl.tk/6165

+0

その場合、私の質問は次のとおりです。データへのアクセス方法を教えてください。画像フィルタをいくつか適用したいと思います。 – Sarien

関連する問題