Как хранить картинки в стопке?

В 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:)

Другие вопросы по тегам