【问题标题】:How to set an ImageDocument to be not dirty in dm-script如何在 dm-script 中将 ImageDocument 设置为不脏
【发布时间】:2020-09-29 09:29:45
【问题描述】:

如何在不保存的情况下在 python 中设置 ImageDocument 不再脏?


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

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 张图像中的每一张是否应该保存。我不能让用户点击 No 100 次。特别是因为文件已保存。

那么,我如何告诉 图片已经保存?

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

【问题讨论】:

    标签: dm-script dm-script python image dm-script dirty-data


    【解决方案1】:

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

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

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

    【讨论】:

    • 这是对我有用的正确答案。我修改了我的问题,使其更符合这个答案。显示一些dm-script 代码可能更容易被其他用户理解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    • 2012-12-30
    • 2015-09-10
    • 2021-02-09
    相关资源
    最近更新 更多