如何复制图像中的切片?
How to copy slices in a image?
我想制作包含多个切片的正面图像的副本,如下所示:
image with several slices
我使用了图像克隆功能
image front, img
front.getfrontimage()
img=imageclone(front)
img.showimage()
但它只复制了第一个切片。
有谁知道如何制作这种图像的副本>"<
非常感谢~
复制图像(无论其显示方式如何)的最简单方法是通过其 "container" - ImageDocument。以下是代码:
ImageDocument imgDoc = GetFrontImageDocument();
number DoDeepCopy = 1;
ImageDocument newDoc = imgDoc.ImageDocumentClone(DoDeepCopy);
newDoc.ImageDocumentShow();
如果您需要操作单个切片,那就更复杂了。希望这有帮助。
作为已接受(正确和最佳)答案的扩展,了解如何从 "image" 到其 imageDocument 是值得的。你在这个例子中这样做:
ClearResults()
image frontImg := GetFrontImage()
imageDocument frontDoc = GetFrontImageDocument()
Result( "Grapped from application:" )
Result( "\n\t Image: " + frontImg.ImageGetLabel() + "\t ID = " + frontImg.ImageGetID() )
Result( "\n\t Doc : " + frontDoc.ImageDocumentGetName() + "\t ID = " + frontDoc.ImageDocumentGetID() )
imageDocument docFromImg = frontImg.ImageGetOrCreateImageDocument()
Result( "\n Taken from image:" )
Result( "\n\t Doc : " + frontDoc.ImageDocumentGetName() + "\t ID = " + docFromImg.ImageDocumentGetID() )
image imgFromDoc := frontDoc.ImageDocumentGetImage( 0 )
Result( "\n Taken from imageDocument:" )
Result( "\n\t Image: " + frontImg.ImageGetLabel() + "\t ID = " + imgFromDoc.ImageGetID() )
请注意,图像不一定具有 imageDocument。 imageDocument 仅在显示或保存图像时创建。这就是命令被称为 ...GetOrCreate
.
的原因
同样,一个 imageDocument 可能包含多个图像(或 none)。
这有点令人费解,而且看起来很混乱,因为内部 class 层次结构之后的许多 "correct" 命令都被简化命令包装起来,以方便编写脚本。
f.e。使用 SaveSave()
保存图像需要一个 image
变量,但它确实需要保存一个 imageDocument
。所以它隐含地 gets/creates 一个。否则,用户将需要编写正确但更多的 'complicated' 脚本。
而不是:
string path = "C:\test.dm4"
image img := GetFrontImage()
img.SaveImage( path )
一个人需要:
string path = "C:\test.dm4"
string handler = "Gatan Format"
image img := GetFrontImage()
imageDocument doc = img.ImageGetOrCreateImageDocument()
doc.ImageDocumentSaveToFile( handler, path )
另请注意:虽然使用 imageDocuments 的路线是正确的方法,但您应该知道 "linePlot displays" 确实很特别。它们是可能包含多个图像的 imageDisplay 对象,而 imageDocuments 是可能包含多个 imageDisplay 的对象。我指出这一点是为了让您知道您需要将新图像添加到 imageDisplay 以获得切片图像中的更多切片。如果将它们添加到 imageDocument,您将在一个文件中显示多个 linePlot。
根据您 "deep" 了解所有这些的方式,我建议您阅读有关 "image/imageDocument/imageDisplay/components" 的文档部分并进行一些测试。如果问题仍然存在,post 它们在 Whosebug 上 :c)
我想制作包含多个切片的正面图像的副本,如下所示: image with several slices 我使用了图像克隆功能
image front, img
front.getfrontimage()
img=imageclone(front)
img.showimage()
但它只复制了第一个切片。 有谁知道如何制作这种图像的副本>"< 非常感谢~
复制图像(无论其显示方式如何)的最简单方法是通过其 "container" - ImageDocument。以下是代码:
ImageDocument imgDoc = GetFrontImageDocument();
number DoDeepCopy = 1;
ImageDocument newDoc = imgDoc.ImageDocumentClone(DoDeepCopy);
newDoc.ImageDocumentShow();
如果您需要操作单个切片,那就更复杂了。希望这有帮助。
作为已接受(正确和最佳)答案的扩展,了解如何从 "image" 到其 imageDocument 是值得的。你在这个例子中这样做:
ClearResults()
image frontImg := GetFrontImage()
imageDocument frontDoc = GetFrontImageDocument()
Result( "Grapped from application:" )
Result( "\n\t Image: " + frontImg.ImageGetLabel() + "\t ID = " + frontImg.ImageGetID() )
Result( "\n\t Doc : " + frontDoc.ImageDocumentGetName() + "\t ID = " + frontDoc.ImageDocumentGetID() )
imageDocument docFromImg = frontImg.ImageGetOrCreateImageDocument()
Result( "\n Taken from image:" )
Result( "\n\t Doc : " + frontDoc.ImageDocumentGetName() + "\t ID = " + docFromImg.ImageDocumentGetID() )
image imgFromDoc := frontDoc.ImageDocumentGetImage( 0 )
Result( "\n Taken from imageDocument:" )
Result( "\n\t Image: " + frontImg.ImageGetLabel() + "\t ID = " + imgFromDoc.ImageGetID() )
请注意,图像不一定具有 imageDocument。 imageDocument 仅在显示或保存图像时创建。这就是命令被称为 ...GetOrCreate
.
同样,一个 imageDocument 可能包含多个图像(或 none)。
这有点令人费解,而且看起来很混乱,因为内部 class 层次结构之后的许多 "correct" 命令都被简化命令包装起来,以方便编写脚本。
f.e。使用 SaveSave()
保存图像需要一个 image
变量,但它确实需要保存一个 imageDocument
。所以它隐含地 gets/creates 一个。否则,用户将需要编写正确但更多的 'complicated' 脚本。
而不是:
string path = "C:\test.dm4"
image img := GetFrontImage()
img.SaveImage( path )
一个人需要:
string path = "C:\test.dm4"
string handler = "Gatan Format"
image img := GetFrontImage()
imageDocument doc = img.ImageGetOrCreateImageDocument()
doc.ImageDocumentSaveToFile( handler, path )
另请注意:虽然使用 imageDocuments 的路线是正确的方法,但您应该知道 "linePlot displays" 确实很特别。它们是可能包含多个图像的 imageDisplay 对象,而 imageDocuments 是可能包含多个 imageDisplay 的对象。我指出这一点是为了让您知道您需要将新图像添加到 imageDisplay 以获得切片图像中的更多切片。如果将它们添加到 imageDocument,您将在一个文件中显示多个 linePlot。
根据您 "deep" 了解所有这些的方式,我建议您阅读有关 "image/imageDocument/imageDisplay/components" 的文档部分并进行一些测试。如果问题仍然存在,post 它们在 Whosebug 上 :c)