首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将ImageDocument设置为在dm-script中不脏

如何将ImageDocument设置为在dm-script中不脏
EN

Stack Overflow用户
提问于 2020-09-29 09:29:45
回答 1查看 94关注 0票数 2

如何在不保存的情况下将ImageDocument设置为不再脏在python dm-脚本中?

下面发布了python代码,它可以用下面的dm-script代码表示。

代码语言:javascript
复制
String file_path = GetApplicationDirectory(0, 1).PathConcatenate("test-image.dm4");
Image img := realimage("test", 4, 64, 64);

ImageDocument doc = img.ImageGetOrCreateImageDocument();
doc.ImageDocumentSaveToFile("Gatan Format", file_path);
doc.ImageDocumentShowAtRect(100, 100, 164, 164);

下面的python代码创建并显示了一个ImageDocument。图像已经保存好了。但是,即使直接用自己的模块将其保存在DigitalMicrograph中,它也不承认它已被保存。我可以手动链接文件(通过从python执行dm-script代码),但是我不能告诉程序图像没有被修改。

有一个函数ImageDocumentIsDirty()。但是这个函数只返回图像是否被修改。我不能设置它。

我的程序创建了一个新的工作区,并加载了100多幅图像。关闭DigitalMicrograph时,它会询问是否应该保存100幅图像中的每一幅。我不能离开用户100次点击No。尤其是因为文件被保存了。

那么,我如何告诉dm-脚本图像已经保存了呢?

代码语言:javascript
复制
try:
    import DigitalMicrograph as DM
    import numpy as np
    import execdmscript
    import os

    name = "Test image"
    file_path = os.path.join(os.getcwd(), "test-image.dm4")
    
    # create image
    image_data = np.random.random((64, 64))
    image = DM.CreateImage(image_data)
    image.SetName(name)
    
    # create, save and show image document
    image_doc = image.GetOrCreateImageDocument()
    image_doc.SetName(name)
    image_doc.SaveToFile("Gatan Format", file_path)
    print("Saving image to", file_path)
    image_doc.ShowAtRect(100, 100, 164, 164)
    
    # link the image to the file
    dmscript = "\n".join((
        "for(number i = CountImageDocuments() - 1; i >= 0; i--){",
            "ImageDocument img_doc = GetImageDocument(i);",
            "if(img_doc.ImageDocumentGetName() == name){",
                "img_doc.ImageDocumentSetCurrentFile(path);",
                "break;",
            "}",
        "}"
    ))

    svars = {
        "name": image_doc.GetName(),
        "path": file_path
    }

    with execdmscript.exec_dmscript(dmscript, setvars=svars):
        pass
except Exception as e:
    print("{}: ".format(e.__class__.__name__), e)
    import traceback
    traceback.print_exc()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-29 12:23:02

您要查找的命令是void ImageDocumentClean( ImageDocument imgDoc )

如图所示

代码语言:javascript
复制
image img := realimage("test",4,100,100)
img.ShowImage()
imageDocument doc = img.ImageGetOrCreateImageDocument()

Result("\n Dirty? " + doc.ImageDocumentIsDirty())
doc.ImageDocumentClean()
Result("\n Dirty? " + doc.ImageDocumentIsDirty())

另外:首先,它变得脏的原因是,窗口位置作为文档的一部分存储。(其他东西,比如标签,也可以适用。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64116748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档