如何将图片存储在堆栈中?

时间:2013-04-29 14:20:01

标签: livecode hypercard

在Hypercard中,我只能在卡片上存储图片。在LiveCode中,可以在堆栈级别存储图片集合。它是否正确?如果是,如何将文件夹中的所有图片加载到堆栈中?如何将读取脚本更改为仅将所有对图片的引用读入堆栈?

3 个答案:

答案 0 :(得分:3)

我认为不可能将图像存储在堆栈中,而不能存储在卡上。要在卡上存储图像,您需要import命令。它会在当前(最前面)的卡上放置一个图像,例如:

answer file "select a picture"
if it <> "" then
   import paint from file it
end if

要从一个文件夹导入多个图片,您可以使用ask folder命令,然后使用the defaultfoderthe 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

答案 1 :(得分:3)

如果不将图像放在卡上,将图像存储在堆栈中并不太难。这样做:

在任何卡上创建一个组。 将所有图像导入其中。 在“对象”菜单中,选择“删除组”。

这会从卡中删除该组,但不会将其删除。图像组不存在于任何卡上,但所有图像都可用。您可以正常引用它们,将它们用作图标,稍后将它们复制到卡中,无论您需要什么。这就像在卡片上有一个不可见的组,只是它不是层次结构中的对象。它不接收任何消息,也不在对象分层中。

顺便说一下,这是导入的HyperCard堆栈存储图标图像的方式。在HC导入后,您可以在“对象”菜单的“放置组”菜单项中找到名为“HC图标”的未放置组。它在任何卡上都不存在,但所有导入的按钮仍然显示其图标。

答案 2 :(得分:1)

您可以将所有图像存储在堆栈中的文件夹中,例如;

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