The key functions that allow access to Data Elements, or metadata, in a DICOM image include:
For a complete list, see Data Set Functions.
These functions will allow querying a DICOM image for existence of tags, lookup of a tag by name, tag iteration, and retrieval of tag data. Alternatively, to write data tags, see Writing Data Elements.
This topic provides information about how to do the following:
Search for a Tag
The follow snippet will demonstrate how to find a tag by name (example: patient name) in a DICOM image, and update the data pointer to the tag accordingly.
C and C++ |
Copy Code
|
BOOL was_found;
AT_DCM_TAG tag = DCM_TAG_PatientsName;
MED_DCM_DS_move_find(myDicomImage, MED_DCM_MOVE_LEVEL_FLOAT, tag, NULL, NULL, NULL, NULL, &was_found);
if (was_found)
{
// Process tag here. e.g, MED_DCM_DS_curr_data_get_string ( … )
}
|
Read All Tags in a DICOM Image
The following snippet sequentially reads all tags in a DICOM image. First, call MED_DCM_DS_move_first to position the data pointer to the first tag. Next, MED_DCM_DS_move_next can be used to iterate through each tag, and keep track of how many tags remain. For each tag, MED_DCM_util_tag_info_get is used to retrieve its name.
C and C++ |
Copy Code
|
void PrintAllDicomDataElements(HIGEAR dicomImage)
{
//Check if the image has tags
BOOL hasDataElements;
MED_DCM_DS_exists(dicomImage, &hasDataElements);
if (hasDataElements == FALSE)
{
printf("Image has no data elements");
return;
}
printf("Dicom Tags:\n");
//Use MED_DCM_DS_move_next to loop through each tag and print information
char elementData[100];
char tagName[100];
AT_DCM_TAG tag = 0;
LONG numberOfElementsRemaining = 0;
MED_DCM_DS_info_get(dicomImage, &numberOfElementsRemaining, NULL);
MED_DCM_DS_move_first(dicomImage, MED_DCM_MOVE_LEVEL_FLOAT, &tag, NULL, NULL, NULL, NULL);
while (numberOfElementsRemaining > 0)
{
MED_DCM_util_tag_info_get(tag, NULL, NULL, NULL, tagName);
MED_DCM_DS_curr_data_get_string(dicomImage, elementData, sizeof(elementData));
printf("%s -> %s\n", tagName, elementData);
MED_DCM_DS_move_next(dicomImage, MED_DCM_MOVE_LEVEL_FLOAT, &tag,
NULL, NULL, NULL, NULL, &numberOfElementsRemaining);
}
}
|