You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过DM-script获取Gatan DigitalMicrograph比例尺标签文本?

如何通过DM-script获取DigitalMicrograph图像的比例尺标签文本?

我正在使用Gatan DigitalMicrograph(DM-script),尝试通过编程获取比例尺上显示的标签文本,例如"200 nm"或"10 μm"。我原本以为该信息存储在与比例尺关联的标签组中,因此尝试了以下代码:

Image img := GetFrontImage()
ImageDisplay img_disp = img.ImageGetImageDisplay(0)
Component scale = img_disp.ComponentAddNewComponent(31, 0, 0, 1, 1)
scale.ComponentSetRect(200, 200, 250, 300)
TagGroup tg = scale.ComponentGetTagGroup()
tg.TagGroupOpenBrowserWindow(0)

但标签组显示为空。请问如何通过DM-script从DigitalMicrograph图像中获取比例尺标签文本(例如"500 nm")?该值是否存储在可访问的位置,还是仅在渲染时生成?


解决方案

比例尺的显示文本并非直接存储在组件标签组中,而是基于图像物理尺寸参数动态计算生成的。你可以通过以下两种方式获取对应文本:

方法1:调用内置函数直接获取格式化文本

DigitalMicrograph提供了专门的函数,可直接读取比例尺组件的显示文本:

Image img = GetFrontImage()
ImageDisplay disp = img.ImageGetImageDisplay(0)
// 查找已存在的比例尺组件(类型ID为31)
Component scaleComp = disp.ComponentFindChildByType(31, 0)

if( scaleComp.ScriptObjectIsValid() )
{
    string scaleText = scaleComp.ComponentScaleBarGetFormattedLengthText()
    Result( "比例尺文本:" + scaleText + "\n" )
}
else
{
    Result( "未找到图像上的比例尺组件\n" )
}

方法2:基于图像元数据计算生成

从图像的像素尺寸、物理尺寸等元数据反向计算比例尺代表的长度,再格式化输出文本:

Image img = GetFrontImage()
number pixWidth = img.ImageGetDimensionSize(0)
number physWidth = img.ImageGetPhysicalSizeX()
number physUnit = img.ImageGetPhysicalUnit()

// 获取已存在的比例尺组件的像素长度
ImageDisplay disp = img.ImageGetImageDisplay(0)
Component scaleComp = disp.ComponentFindChildByType(31, 0)
number scalePixLength = scaleComp.ComponentGetRect().width

// 计算比例尺对应的物理长度
number scalePhysLength = physWidth * (scalePixLength / pixWidth)

// 匹配物理单位文本
string unitStr
switch( physUnit )
{
    case 0: unitStr = "m"
    case 1: unitStr = "cm"
    case 2: unitStr = "mm"
    case 3: unitStr = "μm"
    case 4: unitStr = "nm"
    case 5: unitStr = "Å"
    default: unitStr = "unknown"
}

// 格式化最终文本
string scaleText = Format( "%.2f %s", scalePhysLength, unitStr )
Result( "比例尺文本:" + scaleText + "\n" )

关键说明

  • 你之前的代码问题在于新建了空白的比例尺组件,而非获取图像上已存在的组件,应该用ComponentFindChildByType(31, 0)定位现有比例尺。
  • 比例尺文本是动态渲染的,但通过上述两种方式均可获取:要么调用内置函数直接读取格式化结果,要么基于元数据自行计算生成。

内容的提问来源于stack exchange,提问作者Samuel Hao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 22:32:09