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

what is the difference between DeleteImage() and closeImage()?

如果我在线程中使用 DeleteImage() 与 CloseImage(),似乎有区别 - 但我只能猜测。有人有明确的定义吗?

更多详情: 在线程中,图像 A 具有 ROI。如果用户删除了ROI,我也想关闭图片A,但是后面线程中还是会再次使用。
似乎当我使用 A.deleteImage() 时,我必须重新定义该图像,而如果我使用 A.CloseImage() - 我不需要。

看起来是这样,但如果有人确定,请告诉我。

谢谢

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

Anything will remain a valid memory object as long as there is a valid reference to it.

如果是图片,则转换为:

An image will stay in memory as long as at least one of the following is true:

  • The image is displayed on the screen
  • A script variable points to the image
  • Any other DM routine has a variable that points to the image

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

对于已显示 图像,这意味着"close" 显示。作为用户,您将单击 window 的 "X"。脚本命令 CloseImage() 调用相同的功能。请注意,在未显示的图像上使用此命令不会执行任何操作。进一步注意,关闭图像不会删除任何变量或它们对该图像的引用。

对于脚本变量,这意味着您必须以某种方式"unlink" 图像中的变量。 (与使用 := 来评估它相反。)。这是通过 DeleteImage() 命令完成的。或者,也可以直接将变量分配给 NULL 指针,如 img := NULL

对于 来自 DM 的引用,您无能为力,也不应该。如果某个例程需要 图像在那里,它将保留。您可以关闭 显示,但您永远无法将其删除。这就是为什么您经常可以 'find' 图片,甚至可以使用它们的标签来展示它们。相机参考图像就是一个很好的例子,但还有其他例子。

视觉上:


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

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!
}

现在应该也清楚了,为什么标签A:

的显示图像可以使用CloseImage( A )而不是DeleteImage( A )

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