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' 不是脚本变量!
如果我在线程中使用 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' 不是脚本变量!