关键函数:DcmObject *DcmItem::nextInContainer(const DcmObject *obj),它是DcmObject 中的虚函数,被DcmItem类实现,由于DcmDataSet类继承于DcmItem,所以DcmDataSet对象使用此方法就能能够遍历0008 - 7FE0之间的TAG。
这个函数的原代码为
DcmObject *DcmItem::nextInContainer(const DcmObject *obj) { if (!obj) return elementList->get(ELP_first); //elementList 为DcmList*,DcmItem中的 else { if (elementList->get() != obj) { for(DcmObject * search_obj = elementList->seek(ELP_first); search_obj && search_obj != obj; search_obj = elementList->seek(ELP_next) ) { /* do nothing, just keep iterating */ } } return elementList->seek(ELP_next); } }
分析代码可知:
(1)当用nextInContainer(NULL)时,返回一个DcmObject 指针,使用这个指针的getTag()方法就能得到一个Tag1,这个Tag1是图像中组号为0008的第一个Tag。(此处定义一个nextInContainer(NULL)的返回对象:DcmObject * pObject_tg)
(2)当用nextInContainer(pObject_tg)时,也返回一个DcmObject 指针,同样使用这个指针的getTag()方法就能得到一个Tag2,这个Tag2是图像中组号为0008的第二个Tag。也就是跟在Tag1后面的Tag.
这样再设计一个很简单的循环就能遍历0008 - 7FE0之间的所有TAG了。