Code: Select all
/// <summary>
/// Prints information about DICOM series to the console.
/// </summary>
/// <param name="dir">The directory path.</param>
public static void PrintDicomSeriesInformation(string dir)
{
// create the DICOM series manager
Vintasoft.Imaging.Metadata.DicomSeriesManager manager = new Vintasoft.Imaging.Metadata.DicomSeriesManager();
manager.Images = new Vintasoft.Imaging.ImageCollection();
// get names of DICOM files in file directory
string[] dicomFilePaths = System.IO.Directory.GetFiles(dir, "*.dcm", System.IO.SearchOption.AllDirectories);
// add DICOM files to the DICOM series manager
foreach (string dicomFilePath in dicomFilePaths)
manager.Images.Add(dicomFilePath);
// get patient identifiers from DICOM files
string[] patientIdentifiers = manager.GetPatientIdentifiers();
// for each patient identifier
foreach (string patientIdentifier in patientIdentifiers)
{
// get patient metadata
Vintasoft.Imaging.Metadata.DicomPageMetadata patientMetadata = manager.GetPatientMetadata(patientIdentifier);
// print patient information
System.Console.WriteLine("Patient Name: {0}", GetValueAsString(patientMetadata, Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDataElementId.PatientName));
System.Console.WriteLine("Patient Birth Date: {0}", GetValueAsString(patientMetadata, Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDataElementId.PatientBirthDate));
// get studies identifiers for patient
string[] studyIdentifiers = manager.GetStudyIdentifiers(patientIdentifier);
// print the studies count for patient
System.Console.WriteLine("Study Count: {0}", studyIdentifiers.Length);
// for each study identifier
foreach (string studyIdentifier in studyIdentifiers)
{
// get the study metadata
Vintasoft.Imaging.Metadata.DicomPageMetadata studyMetadata = manager.GetStudyMetadata(studyIdentifier);
// print study information
System.Console.WriteLine("\tStudy Date: {0}", GetValueAsString(studyMetadata, Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDataElementId.StudyDate));
System.Console.WriteLine("\tStudy Time: {0}", GetValueAsString(studyMetadata, Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDataElementId.StudyTime));
System.Console.WriteLine("\tStudy Description: {0}", GetValueAsString(studyMetadata, Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDataElementId.StudyDescription));
System.Console.WriteLine("\tModality: {0}", GetValueAsString(studyMetadata, Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDataElementId.Modality));
// get series identifiers for the study
string[] seriesIdentifiers = manager.GetSeriesIdentifiers(studyIdentifier);
// print the series count for the study
System.Console.WriteLine("\tSeries Count: {0}", seriesIdentifiers.Length);
// for each series identifier
foreach (string seriesIdentifier in seriesIdentifiers)
{
// get series metadata
Vintasoft.Imaging.Metadata.DicomPageMetadata seriesMetadata = manager.GetSeriesMetadata(seriesIdentifier);
// print series information
System.Console.WriteLine("\t\tSeries Description: {0}", GetValueAsString(seriesMetadata, Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDataElementId.SeriesDescription));
System.Console.WriteLine("\t\tSeries Date: {0}", GetValueAsString(seriesMetadata, Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDataElementId.SeriesDate));
System.Console.WriteLine("\t\tSeries Time: {0}", GetValueAsString(seriesMetadata, Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDataElementId.SeriesTime));
// get images for the series
Vintasoft.Imaging.VintasoftImage[] images = manager.GetSeriesImages(seriesIdentifier);
// print the image count in the series
System.Console.WriteLine("\t\t\tImage Count: {0}", images.Length);
}
}
}
}
/// <summary>
/// Returns the DICOM metadata value as a string.
/// </summary>
/// <param name="pageMetadata">The DICOM page metadata.</param>
/// <param name="id">The DICOM data element identifier.</param>
/// <returns>
/// The string with DICOM metadata value.
/// </returns>
private static string GetValueAsString(
Vintasoft.Imaging.Metadata.DicomPageMetadata pageMetadata,
Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDataElementId id)
{
// get metadata node
Vintasoft.Imaging.Metadata.DicomDataElementMetadata node = pageMetadata.FindChildNode(id);
// if metadata node exists
if (node != null && node.Value != null)
{
if (node.Value is Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomUid)
{
Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomUid uid = (Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomUid)node.Value;
return uid.Value;
}
else if (node.Value is Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDateTime)
{
Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDateTime dateTime = (Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDateTime)node.Value;
return dateTime.LocalDateTime.ToString();
}
else
{
return System.Convert.ToString(node.Value);
}
}
return null;
}
Code: Select all
Patient Name: AGECANONIX
Patient Birth Date:
Study Count: 1
Study Date: 01.12.2003 0:00:00
Study Time: 12:00:00
Study Description: Specials^1CoronaryCTA_with_spiral _CTA_pre
Modality: CT
Series Count: 1
Series Description: CorCTA w/c 1.0 B20f
Series Date: 01.12.2003 0:00:00
Series Time: 12:00:00
Image Count: 10
Patient Name: CEREBRIX
Patient Birth Date: 01.04.1935 0:00:00
Study Count: 2
Study Date: 20.07.2007 0:00:00
Study Time: 08:13:35.9680000
Study Description: Neuro^Crane
Modality: MR
Series Count: 1
Series Description: t1_mpr3D_ns_sag_gd
Series Date: 20.07.2007 0:00:00
Series Time: 08:59:10.3750000
Image Count: 15
Study Date: 03.08.2007 0:00:00
Study Time: 16:42:32.1090000
Study Description: PET^PETCT_CTplusFET_LM_Brain (Adult)
Modality: PT
Series Count: 1
Series Description: dynamic recon 3x10min Volume (Corrected)
Series Date: 03.08.2007 0:00:00
Series Time: 16:53:56
Image Count: 10
Patient Name: RATIB^OSMAN
Patient Birth Date: 25.06.1955 0:00:00
Study Count: 1
Study Date: 30.09.2004 0:00:00
Study Time: 11:56:15.5930000
Study Description: Cardiac^1CTA_CORONARY_ARTERIES_lowHR_TESTBOLUS (Adult)
Modality: CT
Series Count: 1
Series Description: CorCTALow 2.0 B25f 0-95%
Series Date: 30.09.2004 0:00:00
Series Time: 14:28:38.4680000
Image Count: 25