使用DCMTK遍历读取DICOM文件所有Tag的方法

 关键函数:DcmObject *DcmItem::nextInContainer(const DcmObject *obj),它是DcmObject 中的虚函数,被DcmItem类实现,由于DcmDataSet类继承于DcmItem,所以DcmDataSet对象使用此方法就能能够遍历0008 - 7FE0之间的TAG。

这个函数的原代码为

[cpp]  view plain copy
  1. DcmObject *DcmItem::nextInContainer(const DcmObject *obj)  
  2. {  
  3.     if (!obj)  
  4.         return elementList->get(ELP_first);  //elementList 为DcmList*,DcmItem中的  
  5.   
  6.     else  
  7.     {  
  8.         if (elementList->get() != obj)  
  9.         {  
  10.             for(DcmObject * search_obj = elementList->seek(ELP_first);  
  11.                 search_obj && search_obj != obj;  
  12.                 search_obj = elementList->seek(ELP_next)  
  13.                ) {  
  14.                 /* do nothing, just keep iterating */  
  15.             }  
  16.         }  
  17.         return elementList->seek(ELP_next);  
  18.     }  
  19. }  

分析代码可知:

(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了。

 

本文来源:http://blog.csdn.net/a36254094/article/details/7614428

你可能感兴趣的:(标签,DCMTK,DICOM)