Я пытаюсь прочитать и записать значения атрибутов файла 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);
FAQ GDCM дает несколько отличных примеров того, как получить значение атрибута, но эти примеры не работают так, как я думал.
Вот мои вопросы об этих примерах.
Как я могу преобразовать значение атрибута в его тип?
if( header.FindDataElement( Tag(0x2, 0x13 ) )
DataElement &de = header.GetDataElement( Tag(0x2, 0x13) );
Что если значение атрибута является массивом?
sf=gdcm.StringFilter()
sf.SetFile(r.GetFile())
print sf.ToStringPair(gdcm.Tag(0x0028,0x0010))
На самом деле мне очень нравится следующее решение. Но значит ли это, что мне нужно написать интерфейс для КАЖДОГО атрибута?
const DataSet &ds = file.GetDataSet();
Attribute<0x0020,0x0032> at;
at.Set( ds );
if( at.GetValue() == 0.0 ) exit(1);
Любые предложения буду благодарен.
Вы отправили точное сообщение о копировании / вставке в список рассылки GDCM:
И я ответил на ваш вопрос здесь:
Для удобства вот еще раз:
gdcm :: Attribute действительно предназначен только для людей, имеющих дело с конкретными
приписывать. Если у вас нет тега раньше времени и только
базовый тип элемента данных, а затем взглянуть на
gdcm :: Element<>.
Других решений пока нет …