如何将ImageDocument设置为在DM脚本中不脏

问题描述

如何在不保存的情况下在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张图像中是否应该保存。我不能离开用户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,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()

解决方法

您要查找的命令是 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())

还:首先变脏的原因是,窗口位置作为文档的一部分存储。 (其他内容,例如标签,也可能适用。)