Как хранить картинки в стопке?
В Hypercard я могу хранить картинки только на карточках. В LiveCode можно хранить коллекцию картинок на уровне стека. Это правильно? Если да, как мне загрузить все картинки из папки в стек? И как мне изменить скрипт чтения, чтобы только читать все ссылки на картинки в стек?
3 ответа
Не слишком сложно хранить изображения в стопке, не помещая их на карту. Сделай это:
Создайте группу на любой карточке. Импортируйте все свои изображения в это. В меню "Объект" выберите "Удалить группу".
Это удаляет группу с карты, но не удаляет ее. Группа изображений не существует на карте, но все ваши изображения доступны. Вы можете ссылаться на них как обычно, использовать их в качестве значков, позже скопировать их на карту, что вам нужно. Это похоже на наличие невидимой группы на карте, только это не объект в иерархии. Он не получает сообщений и не находится на уровне объекта.
Кстати, именно так импортированные стеки HyperCard хранят изображения своих значков. После импорта HC вы можете найти неразмещенную группу под названием "Иконки HC" в пункте меню "Поместить группу" в меню "Объект". Его нет ни на одной карте, но все импортированные кнопки по-прежнему показывают свои значки.
Я думаю, что невозможно хранить изображения в стеке, но не на карте. Для хранения изображений на карте вам понадобится import
команда. Это поместит изображение на текущую (самую переднюю) карту, например:
answer file "select a picture"
if it <> "" then
import paint from file it
end if
Чтобы импортировать несколько изображений из одной папки, вы можете использовать ask folder
командовать и использовать the defaultfoder
а также the files
чтобы получить их всех:
answer folder "select a folder"
if it <> "" then
set the defaultfolder to it
put the files into myListOfFiles
repeat for each line myFile in myListOfFiles
import paint from file myFile
end repeat
end if
Обратите внимание, что в некоторых ОС есть скрытые файлы, которые будут отображаться в the files
, Чтобы избежать их, вам нужно отфильтровать их, например, в Mac OS X:
filter myListOfFiles without ".*"
Другой способ избежать нежелательных типов файлов - добавить спецификатор для файлов, которые вы хотите включить:
if char -4 to -1 of myFile is among the items of ".gif,.jpg,jpeg,.png,.bmp,.tif,tiff" then
import paint from file myFile
end if
Вы можете хранить все изображения в папке в стеке с чем-то вроде;
answer folder "Select the folder containing your images"
if it <> "" then
set the folder to it
put the files into tFiles
repeat for each line tFile in tFiles
set the uImages[tFile] of this stack to URL("binfile:" & tFile)
end repeat
end if
Если на вашей карте был объект изображения с именем "myImage", а одно из изображений в папке называлось "car.png", то вы могли бы это сделать;
set the text of image "myImage" to the uImages["car.png"] of this stack
Чтобы получить список изображений, хранящихся в стеке, вы можете ссылаться;
put the customKeys["uImages"] of this stack into tImageList
HTH:)