2

我正在尝试读取和写入 dicom 文件的属性值。接口应该是这样的:

// only need to support std::string, int, float, float*, etc.
template<class T>
T getTagValue(const DataSet& ds, const Tag& tag);

template<class T>
void setTagValue(DataSet& ds, const Tag& tag, const T& value);

GDCM的FAQ提供了一些很好的例子来说明如何获取属性值,但是这些例子并不像我想的那样工作。

以下是我对这些示例的问题。

  1. 如何将属性值转换为其类型?

    if( header.FindDataElement( Tag(0x2, 0x13 ) )
         DataElement &de = header.GetDataElement( Tag(0x2, 0x13) );
    
  2. 如果属性值是一个数组呢?

     sf=gdcm.StringFilter()
     sf.SetFile(r.GetFile())
     print sf.ToStringPair(gdcm.Tag(0x0028,0x0010))
    
  3. 实际上,我真的很喜欢以下解决方案。但这是否意味着我必须为每个属性编写一个接口?

     const DataSet &ds = file.GetDataSet();
     Attribute<0x0020,0x0032> at;
     at.Set( ds );
     if( at.GetValue() == 0.0 ) exit(1);
    

任何建议将不胜感激。

4

1 回答 1

2

您已在 GDCM 邮件列表上发布了准确的复制/粘贴消息:

我在这里回答了你的问题:

为方便起见,这里又是:

gdcm::Attribute 仅适用于处理特定属性的人。如果您现在没有提前标记标签并且只有数据元素的底层类型,那么请查看 gdcm::Element<>。

于 2016-01-04T10:08:49.687 回答