2013-04-29 36 views
1

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

回答

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 
+0

这似乎将所有图像放在一张卡上。我如何确保每张图片都放在自己的卡片上? – 2013-04-29 16:43:46

+0

在适当的地方添加:'new card' :) – BvG 2013-04-29 20:43:42

+1

并且不要忘记查看内置字典中的所有术语 – BvG 2013-04-29 20:44:26

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

+0

'uImages'是一个包含文件引用的数组?我看不到变量'tImageList'的定义。 – 2013-04-29 16:45:42

+0

uImages是在重复循环中创建的自定义属性集(自定义属性的数组)。tImageList可以是任何变量 - 我只是通过转储其中设置的属性的键来创建它。查看LiveCode用户指南的第7.9节以获取有关定制属性集的更多信息。 – splash21 2013-04-29 21:39:36

+0

7.8.3 **自定义属性**的内容我发现: *您可以使用其属性名称与集合 命令一起设置自定义属性的值,与您设置内置的方式相同属性* – 2013-05-01 22:39:39

3

这不是太难存储在堆栈中的图像,而不将它们放置在一张卡片上。这样做:

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

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

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