我编写了一个小程序,将 ROI 的帧和位置从一个图像复制到另一个相同大小的图像。我现在要做的是将两个 ROI 连接起来,这样当我移动一个 ROI 时,另一个 ROI 会相应地移动。
在 Dave 的 mitchell DM 脚本网站上,我发现他使用了函数 ConnectObject。但他没有解释它是如何工作的。我阅读了 DM3 的文档,但找不到有关该功能的任何信息。
我编写了一个小程序,将 ROI 的帧和位置从一个图像复制到另一个相同大小的图像。我现在要做的是将两个 ROI 连接起来,这样当我移动一个 ROI 时,另一个 ROI 会相应地移动。
在 Dave 的 mitchell DM 脚本网站上,我发现他使用了函数 ConnectObject。但他没有解释它是如何工作的。我阅读了 DM3 的文档,但找不到有关该功能的任何信息。
对于简单的事情,还有另一种选择:
在这种情况下,ROI 会自动“链接”,因为它们实际上只是内存中的一个对象(但显示在两个显示器上)。更改一个将更改另一个。但是,如果您保存/加载图像,此链接将“丢失”,因为当您加载图像时,所有 ROI(在内存中)都是新创建的。下面是一些简单的示例代码:
image img1, img2
GetTwoLabeledImagesWithPrompt("Select two images of same size.", "Select", "Source", img1, "Destination", img2 )
imageDisplay disp1 = img1.ImageGetImageDisplay( 0 )
imageDisplay disp2 = img2.ImageGetImageDisplay( 0 )
number nR = disp1.ImageDisplayCountROIs()
for ( number i = 0; i<nR; i++ )
{
ROI theROI = disp1.ImageDisplayGetROI(i)
disp2.ImageDisplayAddROI(theROI)
}
这里有两个概念可行。您可以使用以下两种方法之一:
1) 使用“ConnectObject”在 ROI 移动时附加一些功能,即当您移动 ROI 1 时,它会“触发”您可以用来更新其他 rois 的代码。
2) 使用“ImageDisplayListeners”将功能附加到移动特定 imageDisplay 上的任何ROI 时,即当移动图像 A 的 ROI 时,它会触发可用于更新其他 rois 的代码。
您将在此答案中找到示例代码。