dm-script调整图像显示内容



在DM中拖动图像的一个角会触发图像内容刷新到新的窗口大小。触发刷新的DM脚本命令是什么?

具体来说,我想在图像下面添加一个文本。因此,我将imageDocument作为根组件,在图像下方添加文本注释(文本的垂直位置超出图像的底部边界)。没有"imgDoc.ImageDocumentSwitchToPageMode()",文本是不可见的。当我用鼠标更改图像大小时,图像内容被更新并显示文本。寻找这样的脚本

谢谢,

您要查找的命令是void ImageDocumentOptimizeWindow( ImageDocument imgDoc )

,但还有更多的故事:您可以向任何其他Component添加注释(实际上是Components)。ImageDisplay也是Component的专门化。因此,您可以在ImageDisplay-或ImageDocument上添加文本作为注释。

如果是第一个,则文本将移动&当你移动/调整ImageDisplay的大小,但如果你把它添加到ImageDocument的根组件,它是"side-ordered">

下面是一个代码示例:
image test := RealImage("Test",4,512,512)
test=icol
test.ShowImage()
imageDisplay disp = test.ImageGetImageDisplay(0)
imageDocument doc = test.ImageGetOrCreateImageDocument()
If ( TwoButtonDialog("Add as part of Image or Page?","Image","Page") )
{
component text1 = NewTextAnnotation( 10, 550, "Under image as part of ImageDisplay", 20)
disp.ComponentAddChildAtEnd(text1)
doc.ImageDocumentOptimizeWindow()
}
else
{
component text2 = NewTextAnnotation( 10, 550, "Under image as part of ImageDocument", 20)
doc.ImageDocumentEnsurePlacedOnPage()
doc.ImageDocumentSwitchToPageMode()
doc.ImageDocumentGetRootComponent().ComponentAddChildAtEnd(text2)
}

为了更好地理解事物的结构,您可能需要在ImageDocument上运行如下脚本:

void RecursiveListChildren( component parent, string preFix )
{
number numChild = parent.ComponentCountChildren()
Result("n"+preFix+" [Type "+parent.ComponentGetType()+"]")
for( Number i =0; i<numChild; i++ )
RecursiveListChildren( parent.ComponentGetChild(i), prefix + "..." )

}
component root = GetFrontImageDocument().ImageDocumentGetRootComponent()
ClearResults()
RecursiveListChildren(root,".")

对于第一个脚本的两个文档,这将给您:

. [Type 24]
.... [Type 20]
....... [Type 13]

. [Type 24]
.... [Type 20]
.... [Type 13]

对于新的GMS 2。x或更高,答案是void ImageDocumentOptimizeWindow( ImageDocument imgDoc )。不测试。对于较旧的GMS,一般的解决方案是这样的,

void resetImageDisplay(image img) {
imageDisplay imgDsp=img.ImageGetImageDisplay(0)
imageDocument imgDoc = img.ImageGetOrCreateImageDocument()
imgDoc.ImageDocumentSwitchToPageMode()
imgDoc.ImageDocumentSwitchToImageMode(imgDsp)
}
void main() {
image img:=exprSize(512,512, random())
img.showImage()
imageDisplay imgDsp=img.ImageGetImageDisplay(0)
component comp1=imgDsp.NewTextAnnotation(200, 540, "text 1", 14)
component comp2=imgDsp.NewTextAnnotation(200, 560, "text 2", 18)
comp1.ComponentSetForegroundColor(0,0,0)
comp2.ComponentSetForegroundColor(0,0,0)
imgDsp.ComponentAddChildAtEnd(comp1)
imgDsp.ComponentAddChildAtEnd(comp2)
img.resetImageDisplay()
//img.setWindowSize(1024,1024)
}
main()

最新更新