Next: , Previous: , Up: イメージ   [Contents][Index]


41.17.8 イメージの定義

関数create-imagedefimagefind-imageはイメージディスクリプタを作成するための便利な手段を提供します。

Function: create-image file-or-data &optional type data-p &rest props

この関数はfile-or-data内のデータを使用するイメージディスクリプタを作成してリターンする。file-or-dataはファイル名、またはイメージデータを含む文字列を指定できる。前者ならdata-pnil、後者なら非nilであること。file-or-dataが相対ファイル名なら、この関数はimage-load-pathにセットされているディレクトリーにたいして検索を行う。

オプション引数typeはイメージタイプを指定するシンボル。typeが省略かnilなら、create-imageはファイル先頭の数バイトかファイル名からイメージタイプの判断を試みる。

残りの引数propsは追加のイメージプロパティを指定する。たとえば、

(create-image "foo.xpm" 'xpm nil :mask 'heuristic)

サポートされているプロパティのリストについてはイメージのディスクリプタを参照してください。特定のイメージタイプを指定する一部のプロパティについては、そのタイプ固有のサブセクションで説明されています。

この関数はそのタイプのイメージがサポートされていなければnil、それ以外ならイメージディスクリプタをリターンする。

Macro: defimage symbol specs &optional doc

このマクロはイメージマクロとしてsymbolを定義する。引数specsはイメージの表示方法を指定するリストである。3つ目の引数docはオプションのドキュメント文字列。

specs内の各要素はプロパティリストの形式をもち、それぞれが少なくとも:typeプロパティと、:file:dataいずれかのプロパティをもつこと。:typeの値はイメージタイプを指定するシンボル、:fileの値はイメージをロードするファイル、:dataの値は実際のイメージデータを含む文字列であること。以下は例:

(defimage test-image
  ((:type xpm :file "~/test1.xpm")
   (:type xbm :file "~/test1.xbm")))

defimageはそれが使用可能か、つまりそのタイプがサポートされているかとファイルが存在するかを確認するために各要素を1つずつテストする。最初に使用可能な引数がsymbol内に格納するイメージディスクリプタを作成するために使用される。

機能する候補がなければsymbolnilとして定義される。

Function: image-property image property

imagepropertyの値をリターンする。プロパティはsetfを使用してセットできる。プロパティにnilをセットすることによりイメージからプロパティを削除できる。

Function: find-image specs

この関数はイメージ仕様specsのリストの1つを満足するイメージを探すための、便利な手段を提供する。

specs内の各仕様はイメージタイプに応じた内容のプロパティリストである。すべての仕様は少なくとも:type type、および:file file:data dataのいずれかのプロパティを含まなければならない。ここでtypexbmのようにイメージタイプを指定するシンボル、fileはイメージをロードするファイル、dataは実際のイメージデータを含む文字列。このリスト内でtypeがサポートされていて、かつfileが存在する最初の仕様が、リターンされるイメージ仕様の構築に使用される。満足する仕様がなければnilがリターンされる。

イメージはimage-load-path内で検索される。

User Option: image-load-path

この変数の値はイメージファイルを検索する場所のリスト。要素が文字列か値が文字列であるような変数シンボルなら、その文字列が検索を行うディレクトリーの名前になる。値がリストであるような変数シンボルの場合、それは検索を行うディレクトリーのリストとなる。

デフォルトではdata-directoryで指定されたディレクトリーのサブディレクトリーimages、次にdata-directoryで指定されたディレクトリー、最後にload-pathで指定されたディレクトリー内を検索する。サブディレクトリーは自動的には検索に含まれないので、イメージファイルをサブディレクトリー内に配置した場合には、サブディレクトリーを明示的に与える必要がある。たとえばdata-directory内でイメージimages/foo/bar.xpmを見つけるには以下のようにそのイメージを指定すること:

(defimage foo-image '((:type xpm :file "foo/bar.xpm")))
Function: image-load-path-for-library library image &optional path no-error

この関数はLispパッケージlibraryにより使用されるイメージにたいして適切な検索パスをリターンする。

この関数はまずimage-load-path (data-directory/imagesを除外)を使用し、次にload-pathの後にlibraryにとって適切なパス(ライブラリーファイル自身にたいする相対パス../../etc/images../etc/imagesを含む)を補い、最後にdata-directory/imagesからimageを検索する。

それからこの関数は先頭にimageが見つかったディレクトリー、その後にload-pathの値が続くディレクトリーのリストをリターンする。pathが与えられたらload-pathのかわりに使用する。

no-errorが非nil、かつ適切なパスが見つからない場合にはエラーをシグナルしない。かわりに前記のディレクトリーリストをリターンするが、イメージのディレクトリーの箇所にnilが出現する点が異なる。

以下はimage-load-path-for-libraryの使用例:

(defvar image-load-path) ; shush compiler
(let* ((load-path (image-load-path-for-library
                    "mh-e" "mh-logo.xpm"))
       (image-load-path (cons (car load-path)
                              image-load-path)))
  (mh-tool-bar-folder-buttons-init))

イメージはimage-scaling-factor変数にもとづいて作成時に自動的にスケーリングされます。この値は浮動小数点数(1より大きい値はサイズの拡大、小さい値はサイズの縮小を意味する)、またはフォントのピクセルサイズにもとづいたスケーリング倍率で計算を行うシンボルautoのいずれかです。