2016-01-04 3 views
1

Я пытаюсь читать и записывать значения атрибутов файла dicom. интерфейсы должны быть что-то вроде этого:GDCM: получение значения тега

// 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); 

FAQ of GDCM дает некоторые большие примеры того, как получить значение атрибута, но эти примеры не работают, как я думал.

Вот мои вопросы об этих примерах.

  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); 
    

Любые предложения будут благодарны.

ответ

2

Вы отправили точное сообщение копирования/вставки из списка рассылки GDCM:

И я ответил на ваш вопрос здесь:

Для удобства здесь снова:

gdcm :: Атрибут действительно предназначен только для людей, имеющих дело с определенным атрибутом . Если вы еще не указали тег раньше времени и только базовый тип элемента данных , посмотрите на gdcm :: Элемент <>.

+0

Да, я просто надеялся получить наилучшую практику для этого вопроса. И я не ожидал, что кто-то увидит этот вопрос с обеих сторон. Спасибо за ваш ответ. :) – Steve

Смежные вопросы