Функции create-image, defimage и
find-image предоставляют удобные способы создания дескрипторов изображений.
Эта функция создает и возвращает дескриптор изображения, который использует
данные из file-or-data. file-or-data может быть именем файла или
строкой, содержащей данные изображения; data-p должен быть nil
для первого случая, не-nil для второго. Если
file-or-data является относительным именем файла, функция будет искать
его в каталогах, указанных в image-load-path.
Необязательный аргумент type — это символ, указывающий тип изображения.
Если type опущен или равен nil, create-image пытается
определить тип изображения по первым байтам файла или по имени файла.
Оставшиеся аргументы, props, указывают дополнительные свойства изображения — например,
(create-image "foo.xpm" 'xpm nil :mask 'heuristic)
См. Дескрипторы изображений для списка поддерживаемых свойств. Некоторые свойства специфичны для определенных типов изображений и описаны в подразделах, посвященных этим типам.
Функция возвращает nil, если изображения этого типа не
поддерживаются. В противном случае она возвращает дескриптор изображения.
Этот макрос определяет symbol как имя изображения. Аргумент specs — это список, который указывает, как отображать изображение. Третий аргумент, doc, — это необязательная строка документации.
Каждый аргумент в specs имеет форму списка свойств, и каждый из них должен
указывать как минимум свойство :type и либо свойство
:file, либо свойство :data. Значение :type
должно быть символом, указывающим тип изображения, значение :file — это файл,
из которого загружается изображение, а значение :data — это строка, содержащая
фактические данные изображения. Вот пример:
(defimage test-image ((:type xpm :file "~/test1.xpm") (:type xbm :file "~/test1.xbm")) )
defimage проверяет каждый аргумент по очереди, чтобы увидеть,
является ли он пригодным — то есть, поддерживается ли тип и существует ли файл. Первый
пригодный аргумент используется для создания дескриптора изображения, который сохраняется в
symbol.
Если ни один из альтернативных вариантов не сработает, то symbol определяется
как nil.
Возвращает значение property в image. Свойства можно
устанавливать с помощью setf. Установка свойства в nil
удалит его из изображения.
Эта функция предоставляет удобный способ найти изображение, удовлетворяющее одному из списка спецификаций изображений specs.
Каждая спецификация в specs — это список свойств, содержимое которого
зависит от типа изображения. Все спецификации должны содержать как минимум свойства
:type type и либо :file file
либо :data data, где type — это символ,
указывающий тип изображения, например, xbm, file — это файл,
из которого загружается изображение, а data — это строка, содержащая фактические
данные изображения. Первая спецификация в списке, чей type поддерживается, и
file существует, используется для построения спецификации изображения, которая
будет возвращена. Если ни одна спецификация не удовлетворена, возвращается nil.
Поиск изображения осуществляется в image-load-path.
Значение этой переменной — это список мест, в которых следует искать файлы изображений. Если элемент является строкой или символом переменной, значение которого является строкой, эта строка считается именем каталога для поиска. Если элемент — это символ переменной, значение которого является списком, то это считается списком каталогов для поиска.
По умолчанию поиск осуществляется в подкаталоге images каталога,
указанного в data-directory, затем в каталоге, указанном в
data-directory, и, наконец, в каталогах, указанных в
load-path. Подкаталоги не включаются в поиск автоматически, поэтому, если вы
поместите файл изображения в подкаталог, вам придется явно указать этот подкаталог. Например,
чтобы найти изображение images/foo/bar.xpm внутри data-directory,
следует указать изображение следующим образом:
(defimage foo-image '((:type xpm :file "foo/bar.xpm")))
Эта функция возвращает подходящий путь поиска для изображений, используемых Lisp-пакетом library.
Функция сначала ищет image с использованием image-load-path,
исключая data-directory/images, а затем в
load-path, после чего следует путь, подходящий для library,
который включает ../../etc/images и ../etc/images
относительно самого файла библиотеки, и, наконец, в
data-directory/images.
Затем эта функция возвращает список каталогов, который сначала содержит каталог, в котором
был найден 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, который вычислит коэффициент масштабирования на основе
размера шрифта. См. Дескрипторы изображений.