GDCM: получение значения тега
Я пытаюсь прочитать и записать значения атрибутов файла 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 приведены отличные примеры того, как получить значение атрибута, но эти примеры не работают так, как я думал.
Вот мои вопросы об этих примерах.
Как я могу преобразовать значение атрибута в его тип?
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);
Любые предложения буду благодарен.
1 ответ
Вы отправили точное сообщение о копировании / вставке в список рассылки GDCM:
И я ответил на ваш вопрос здесь:
Для удобства вот еще раз:
gdcm:: Attribute действительно предназначен только для людей, имеющих дело с определенным атрибутом. Если у вас нет тега раньше времени и только базовый тип элемента данных, посмотрите на gdcm::Element<>.