如何在不显示dm脚本中的图像的情况下添加比例尺

miile7

如何在不显示图像的情况下向图像添加注释,尤其是比例尺?


我有一个记录图像的应用程序。我想向每个重新绘制的图像添加一个比例尺。但是用户可以选择不显示记录的图像。这就是为什么我要在显示图像之前且与显示图像无关地添加比例尺。

该文档建议ImageDocumentSaveToFile()用于保存。因此,我正在为图像创建图像文档。由于比例尺已添加到图像显示中,因此我还添加了图像显示(如果未提供显示)。但是,当我保存图像文档并再次加载它时,出现以下错误:

错误:该操作需要一张图像文档,其中仅包含一张图像

这说明我在某处将图像两次添加到图像文档中。但是我不知道在哪里(代码在下面发布)。

手动打开图像的屏幕截图

我可以从保存路径手动打开图像。该图像显示了内容(此处为纯色),但未显示比例尺(上面显示的屏幕截图)。因此,我想我会以某种方式添加两个显示或图像,其中一个包含比例尺,而另一个不包含比例尺。但是我不知道现在该如何进行以及如何解决这个问题。

我的精简代码发布在下面。


所以我的问题是:在我的代码中什么导致比例尺不显示,以及什么导致GMS在打开图像时引发错误?甚至更好的是,在不显示图像的情况下向图像添加注释的最佳实践是什么?


number image_width = 128;
number image_height = 128;
image img := RealImage("Image",  4, image_width, image_height);
img = 128;

ImageDocument doc = img.ImageGetOrCreateImageDocument();

void addScalebar(ImageDisplay display){
    number top = image_height - image_height / 5;
    number bottom = image_height;
    number left = 0;
    number right = image_width / 3;
    Component scalebar = NewComponent(31, top, left, bottom, right);
    scalebar.ComponentSetForegroundColor(0, 255, 0);
    display.ComponentAddChildAtBeginning(scalebar);
}

image tmp_img;
for(number i = 0; i < doc.ImageDocumentCountImages(); i++){
    tmp_img = doc.ImageDocumentGetImage(i);
    
    if(tmp_img.ImageCountImageDisplays() > 0){
        for(number j = 0; j < tmp_img.ImageCountImageDisplays(); j++){
            addScalebar(tmp_img.ImageGetImageDisplay(j));
        }
    }
    else{
        ImageDisplay disp = doc.ImageDocumentAddImageDisplay(tmp_img, -2);
        addScalebar(disp);
    }
}

string save_format = "Gatan Format";
string path = PathConcatenate(GetApplicationDirectory("temporary", 1), "demo-image");
doc.ImageDocumentSaveToFile(save_format, path);

string open_path;
ImageDocumentAdjustFileNameForSaveFormat(save_format, path, open_path);
result("Demo image is located at '" + open_path + "'\n");

image display_image := OpenImage(open_path);
display_image.ShowImage();

发布的代码以编写dm-script我的原始代码是用python编写的,这是一种不太直接的翻译,dm-script对于可能更容易理解另外,我觉得在张贴问题变得“更笼统” dm-script该问题适用于两种编程语言,我希望该解决方案也能实现。如果不是,并且您知道python的实现,我也很高兴看到它。

BmyGuest

非常好的脚本。您陷入了典型的DM初学者的陷阱,不幸的是,脚本语言具有非常不标准的语法。

之间有一个区别:

tmp_img = doc.ImageDocumentGetImage(i);

和:

tmp_img := doc.ImageDocumentGetImage(i);

第二个示例是您要执行的操作:将图像变量tmp_img指向imageDocument的第i个图像。

但是,第一个示例将第i个图像的数据值复制到新创建的图像中。这个新创建的图像没有imageDisplay!这就是为什么您的代码示例会分支到“ else”语句中的原因。

另请注意,如果您事先修复了该行,则不需要if / else。ImageDocuments无法保存图像,它们包含imageDisplays(与图像相关联)。更具体地说:ImageDocuments具有一个根组件,该根组件与所有组件一样可以具有子组件。ImageDisplays也是组件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在不显示的情况下编辑保存在.fig文件中的图形的属性

如何在不显示Windows控制台的情况下运行Python脚本

如何在QGraphicsView中重置比例尺?

如何在leaflet.js中显示地图比例尺

仅在图像网址存在的情况下如何在Vue.js中显示<img>?

MKMapView的比例尺未显示

您如何在iOS的MapBox中显示比例尺?

如何在不显示多个图标的情况下添加多个悬停工具?

添加距离比例尺

如何在不显示超链接的情况下做出可点击的图像?

在Django中,如何在不显示链接的情况下将信息传递到服务器?

如何更改栅格图中的比例尺?

如何在不显示Windows登录窗口的情况下从远程桌面连接中的会话注销?

Android中的界限。默认比例尺?

从小比例尺图像转换成大比例尺图像

如何在不显示视频中以前的帧的情况下保存动画?

如何在Highcharts中修复xAxis(datetime)比例尺?

如何在X轴上显示完整的比例尺/所有数据点?

在mapkit中显示地图比例尺

如何在不显示php的情况下强制使用php和ajax下载图像

ImageJ,向ImagePlus添加比例尺

如何在添加了脚本的情况下添加div

如何在Matshow中查看比例尺?

如何在不显示Flask中的URI字段的情况下进行重定向?

如何在不显示文档的情况下编写段落

如何在不显示为新数组的情况下向php数组添加元素

如何在不显示输出的情况下运行链接

如何在不显示 dtype 的情况下从对象在 Python 中打印?

Python、selenium - 如何在不显示浏览器窗口的情况下运行脚本