DeleteImage()和closeImage()有什么区别?

时间:2018-04-18 19:56:53

标签: dm-script

如果我在线程中使用DeleteImage()而不是CloseImage(),那么似乎存在差异 - 但我只能猜测。有没有人有明确的定义?

更多细节: 在线程内,图像A具有ROI。如果用户删除了ROI,我也想关闭图像A,但是稍后在线程中仍然会再次使用它 似乎当我使用A.deleteImage()时,我必须重新定义该图像,而如果我使用A.CloseImage() - 我不会。

看起来这就是正在发生的事情,但如果有人确切知道,请告诉我。

谢谢

1 个答案:

答案 0 :(得分:2)

为了解决命令,您需要了解如何管理内存对象。

  

只要存在有效的内存对象,任何内容都将保留为有效的内存对象

如果是图片,请将其转换为:

  

只要至少满足下列条件之一,图片就会保留在内存中   是的:

     
      
  • 图像显示在屏幕上
  •   
  • 脚本变量指向图像
  •   
  • 任何其他DM例程都有一个指向图像的变量
  •   

单个图像可以同时满足上述条件中的多个条件。 从内存中删除图像的唯一方法是,确保删除对它的所有引用。

对于显示的图像,这意味着"关闭"显示器。作为用户,您可以点击" X"的窗口。脚本命令CloseImage()调用相同的功能。请注意,对未显示的图像使用此命令不会执行任何操作。请注意,关闭图像不会删除任何变量或对此图像的引用。

对于脚本变量,这意味着你不得不以#34; unlink"来自图像的变量。 (与使用:=来解决它相反。)这是通过DeleteImage()命令完成的。或者,也可以直接将变量分配给NULL指针,如img := NULL

对于从DM 持有的引用,你无能为力,你也不应该这样做。如果某个例程需要图像,那么它将保留。您可以关闭人机界面,但您永远无法将其删除。这就是为什么你经常可以找到'图像,甚至使用他们的标签显示它们。相机参考图像就是一个很好的例子,但也有其他的。

目视: enter image description here

通过上面给出的解释,您应该能够理解以下示例中的不同行为:

void CloseTest( number ShowItFirst )
{
    image img := realImage( "Test", 4, 100, 100 )
    Result( "\n Assignment: Image is valid:" + img.ImageIsValid() )
    if ( ShowItFirst )
    {
        img.ShowImage()
        Result( "\n Displaying: Image is valid:" + img.ImageIsValid() )
    }
    img.CloseImage()
    Result( "\n Closing: Image is valid:" + img.ImageIsValid() )

    img.ShowImage()
    Result( "\n Displaying: Image is valid:" + img.ImageIsValid() )
}
void DeleteTest( number ShowItFirst )
{
    image img := realImage( "Test", 4, 100, 100 )
    Result( "\n Assignment: Image is valid:" + img.ImageIsValid() )
    if ( ShowItFirst )
    {
        img.ShowImage()
        Result( "\n Displaying: Image is valid:" + img.ImageIsValid() )
    }
    img.DeleteImage()   // This is the same as:      img := NULL
    Result( "\n Deleting: Image is valid:" + img.ImageIsValid() )

    // img.ShowImage()  // This fails, because image is no longer valid!
}

现在还应该清楚,为什么人们可以使用CloseImage( A )而不是DeleteImage( A )来显示标签A的图像:

第一个命令只想关闭标签引用的图像的图像显示。然而,第二个想要解开'来自图像的脚本变量。但标签' A'不是脚本变量!