从文件打开 ImageDocument

Opening ImageDocument from Files

提问人:Michael Ngo 提问时间:7/19/2023 最后编辑:BmyGuestMichael Ngo 更新时间:7/19/2023 访问量:59

问:

在我的脚本中,我将 ImageDocument 作为 Gatan 文件保存到我的本地驱动器。我使用命令 ImageDocumentGetCurrentFile() 来获取该文件的路径。现在,我正在尝试使用带有我刚刚检索的路径的 OpenFileForReadAndWrite() 将该文件加载回我的 DM 工作区,并被告知“系统找不到指定的文件”。(我也尝试过 OpenImage() 并遇到了同样的问题)。

我能够将路径传递到命令提示符中,并且它能够将 ImageDocumentGetCurrentFile() 输出的路径识别为有效并打开 Gatan 文件。因此,该路径似乎有效,并且我的系统似乎没有问题。

我很好奇是否有其他人有解决此问题的提示,以便我可以打开本地保存的文件。

最终,我的目标是暂时从我的工作区中删除图像文档,以便我可以运行菜单命令“Spectrum > Assign ROI as > Background”,无论出于何种原因,当存在这种类型的图像(父图像)时,该命令都会崩溃。我尝试在执行菜单命令之前在文档上调用 ImageDocumentHide(),然后再调用 ImageDocumentShow()。这成功地允许执行菜单命令;但是,我了解到,当显示 ImageDocument 时,之前显示的图像现在只是一个空白页。我也不确定是什么原因造成的。

文件 文件-io 保存 dm-script

评论

1赞 BmyGuest 7/19/2023
如果没有一些示例代码和对失败原因的更好解释,我无法评论您的实际用例。但是,如果您仍然感兴趣,您可能想将其作为一个单独的问题提出。
0赞 Mike Kundmann 7/19/2023
关于你的总体目标的更多细节也会有所帮助。您似乎主要是在尝试以用户的方式操作 DM 时遇到问题,但通过脚本这样做。在大多数情况下,使用脚本触发菜单命令并不是最有效和最灵活的方法。请更详细地说明您的用例。例如,我不明白你所说的“父图像”是什么意思,以及它们如何参与你正在尝试做的事情。
1赞 Michael Ngo 7/19/2023
右。因此,我的目标是获取一个具有 5 个切片的 LinePlotImageDisplay,所有切片都对应于单独的光谱,然后能够使用脚本对所有切片批量执行背景减法和信号提取,以便用户最终得到一个干净的 LinePlotImageDisplay,其中包含所有切片提取的信号以进行比较。我仍然不知道在不使用菜单命令的情况下调用背景减法的任何方法(我在 Dave Mitchell 的脚本库中发现了一个背景减法函数,但该函数导致的结果略有不同)。
1赞 Michael Ngo 7/19/2023
我所说的“父图像”是指 STEM SI ImageDocument,我在其上绘制 ROI 以生成单个光谱,即切片。如果它已加载到当前工作区中,则当您调用频谱>提取>信号时,将出现一个弹出窗口,指出“所选频谱具有父频谱图像。应用于单光谱还是父光谱图像?如果用户手动执行此操作,这通常不是问题,但是当我的脚本运行命令并出现弹出窗口时,在用户选择“应用于单个频谱”后,会显示一条错误消息,指出“请选择有效的频谱”。
1赞 Mike Kundmann 7/20/2023
@MichaelNgo 您的进一步详细信息表明,您的问题寻求与您的实际目标无关的解决方法。我建议你发布一个专注于你的主要目标的新问题,例如“如何从多个光谱中提取和比较信号?正如您已经发现的,这在 DM 中令人惊讶地不平凡。您之前关于“分离和组合 ImageDisplay 图层”的问题是正确的。查看 EELS > EELS 分析>脚本接口的在线帮助中介绍的 EELSSubtractPowerLawBackground 函数。

答:

1赞 BmyGuest 7/19/2023 #1

打开 ImageDocument 的命令既不正确,也不是正确的命令。前者打开一个通用的原始文件,即用作流,而后者是早期过时的包装器,存在问题。它不会加载整个文件,而只会加载其中的(主要)图像数据。OpenFileForReadAndWriteOpenImage

你想像在以下方面一样使用:NewImageDocumentFromFile

string path = "C:/temp/"
image test:=Realimage("MyImg",4,100,100)
test.ShowImage()
imagedocument doc = test.ImageGetOrCreateImageDocument()
doc.ImageDocumentSetCurrentFile("C:/temp/MyImg")
doc.ImageDocumentSetCurrentFileSaveFormat("Gatan Format")
doc.ImageDocumentSave(0)
string savedAs = doc.ImageDocumentGetCurrentFile()
doc.ImageDocumentClose(0)
OKDialog("Do something")
doc = NewImageDocumentFromFile(savedAs)
doc.ImageDocumentShow()

另外:F1 帮助中的示例部分也可能是了解有关文件的更多信息的有用起点:F1 help

评论

0赞 Michael Ngo 7/19/2023
我明白了,NewImageDocumentFromFile() 是正确的命令是有道理的,但我仍然收到相同的错误消息:“系统找不到指定的文件。需要注意的重要一点是,我尝试打开的文件位置大约有 6 个祖先目录,即文件的路径在文件本身之前包含 6 个目录。我还注意到,当我在路径的第一部分调用“DoesFileExist()”时,它返回 true,前 2 个目录作为输入,但 false 返回 3 个或更多目录。DM 可以打开的目录 # 有上限吗?
0赞 BmyGuest 7/20/2023
不,没有。如果“DoesFileExist(path)”未返回 true,则该命令失败。请注意,GMS 中的文件路径要么必须使用 / like in,要么必须转义斜杠,如 此外,有些命令需要文件后缀,有些不需要,有些命令不得包含它们。C:/temp/myfile.dm4C:\\temp\\myfiledm4
0赞 BmyGuest 7/20/2023
@MichaelNgo 文件路径可能有最大长度,但我自己从未遇到过这样的限制。您绝对应该可以达到 256 个字符。