GDCM
2.2.3
|
00001 /*========================================================================= 00002 00003 Program: GDCM (Grassroots DICOM). A DICOM library 00004 00005 Copyright (c) 2006-2011 Mathieu Malaterre 00006 All rights reserved. 00007 See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details. 00008 00009 This software is distributed WITHOUT ANY WARRANTY; without even 00010 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00011 PURPOSE. See the above copyright notice for more information. 00012 00013 =========================================================================*/ 00014 #ifndef GDCMMEDIASTORAGE_H 00015 #define GDCMMEDIASTORAGE_H 00016 00017 #include "gdcmTransferSyntax.h" 00018 00019 namespace gdcm 00020 { 00021 00022 class DataSet; 00023 class Tag; 00024 class FileMetaInformation; 00025 class File; 00026 00027 // WARNING: This class will be deprecated in the future. There is no reason to extend this class. 00028 // Please check the gdcm::UIDs class if adding new well known UID. 00029 00041 class GDCM_EXPORT MediaStorage 00042 { 00043 public: 00044 typedef enum { 00045 MediaStorageDirectoryStorage = 0, 00046 ComputedRadiographyImageStorage, 00047 DigitalXRayImageStorageForPresentation, 00048 DigitalXRayImageStorageForProcessing, 00049 DigitalMammographyImageStorageForPresentation, 00050 DigitalMammographyImageStorageForProcessing, 00051 DigitalIntraoralXrayImageStorageForPresentation, 00052 DigitalIntraoralXRayImageStorageForProcessing, 00053 CTImageStorage, 00054 EnhancedCTImageStorage, 00055 UltrasoundImageStorageRetired, 00056 UltrasoundImageStorage, 00057 UltrasoundMultiFrameImageStorageRetired, 00058 UltrasoundMultiFrameImageStorage, 00059 MRImageStorage, 00060 EnhancedMRImageStorage, 00061 MRSpectroscopyStorage, 00062 NuclearMedicineImageStorageRetired, 00063 SecondaryCaptureImageStorage, 00064 MultiframeSingleBitSecondaryCaptureImageStorage, 00065 MultiframeGrayscaleByteSecondaryCaptureImageStorage, 00066 MultiframeGrayscaleWordSecondaryCaptureImageStorage, 00067 MultiframeTrueColorSecondaryCaptureImageStorage, 00068 StandaloneOverlayStorage, 00069 StandaloneCurveStorage, 00070 LeadECGWaveformStorage, // 12- 00071 GeneralECGWaveformStorage, 00072 AmbulatoryECGWaveformStorage, 00073 HemodynamicWaveformStorage, 00074 CardiacElectrophysiologyWaveformStorage, 00075 BasicVoiceAudioWaveformStorage, 00076 StandaloneModalityLUTStorage, 00077 StandaloneVOILUTStorage, 00078 GrayscaleSoftcopyPresentationStateStorageSOPClass, 00079 XRayAngiographicImageStorage, 00080 XRayRadiofluoroscopingImageStorage, 00081 XRayAngiographicBiPlaneImageStorageRetired, 00082 NuclearMedicineImageStorage, 00083 RawDataStorage, 00084 SpacialRegistrationStorage, // Spatial 00085 SpacialFiducialsStorage, // Spatial.. 00086 PETImageStorage, 00087 RTImageStorage, 00088 RTDoseStorage, 00089 RTStructureSetStorage, 00090 RTPlanStorage, 00091 CSANonImageStorage, 00092 Philips3D, 00093 EnhancedSR, 00094 BasicTextSR, 00095 HardcopyGrayscaleImageStorage, 00096 ComprehensiveSR, 00097 DetachedStudyManagementSOPClass, 00098 EncapsulatedPDFStorage, 00099 EncapsulatedCDAStorage, 00100 StudyComponentManagementSOPClass, 00101 DetachedVisitManagementSOPClass, 00102 DetachedPatientManagementSOPClass, 00103 VideoEndoscopicImageStorage, 00104 GeneralElectricMagneticResonanceImageStorage, 00105 GEPrivate3DModelStorage, 00106 ToshibaPrivateDataStorage, 00107 MammographyCADSR, 00108 KeyObjectSelectionDocument, 00109 HangingProtocolStorage, 00110 ModalityPerformedProcedureStepSOPClass, 00111 PhilipsPrivateMRSyntheticImageStorage, 00112 VLPhotographicImageStorage, 00113 SegmentationStorage, // "1.2.840.10008.5.1.4.1.1.66.4" 00114 RTIonPlanStorage, // 1.2.840.10008.5.1.4.1.1.481.8 00115 XRay3DAngiographicImageStorage, // 1.2.840.10008.5.1.4.1.1.13.1.1 00116 EnhancedXAImageStorage, 00117 RTIonBeamsTreatmentRecordStorage, // 1.2.840.10008.5.1.4.1.1.481.9 00118 SurfaceSegmentationStorage, // "1.2.840.10008.5.1.4.1.1.66.5" 00119 VLWholeSlideMicroscopyImageStorage, // 1.2.840.10008.5.1.4.1.1.77.1.6 00120 RTTreatmentSummaryRecordStorage, // 1.2.840.10008.5.1.4.1.1.481.7 00121 EnhancedUSVolumeStorage, // 1.2.840.10008.5.1.4.1.1.6.2 00122 XRayRadiationDoseSR, // 1.2.840.10008.5.1.4.1.1.88.67 00123 VLEndoscopicImageStorage, // 1.2.840.10008.5.1.4.1.1.77.1.1 00124 BreastTomosynthesisImageStorage, // 1.2.840.10008.5.1.4.1.1.13.1.3 00125 FujiPrivateCRImageStorage, // 1.2.392.200036.9125.1.1.2 00126 MS_END 00127 } MSType; // Media Storage Type 00128 00129 typedef enum { 00130 NoObject = 0, // DICOMDIR 00131 Video, // Most common, include image, video and volume 00132 Waveform, // Isn't it simply a 1D video ? 00133 Audio, // ??? 00134 PDF, 00135 URI, // URL... 00136 Segmentation, // TODO 00137 ObjectEnd 00138 } ObjectType; 00139 00141 static const char* GetMSString(MSType ts); 00142 00144 const char* GetString() const; 00145 static MSType GetMSType(const char *str); 00146 00147 MediaStorage(MSType type = MS_END):MSField(type) {} 00148 00151 static bool IsImage(MSType ts); 00152 00153 operator MSType () const { return MSField; } 00154 00155 const char *GetModality() const; 00156 unsigned int GetModalityDimension() const; 00157 00158 static unsigned int GetNumberOfMSType(); 00159 static unsigned int GetNumberOfMSString(); 00160 static unsigned int GetNumberOfModality(); 00161 00162 00167 bool SetFromFile(File const &file); 00168 00171 bool SetFromDataSet(DataSet const &ds); // Will get the SOP Class UID 00172 bool SetFromHeader(FileMetaInformation const &fmi); // Will get the Media Storage SOP Class UID 00173 bool SetFromModality(DataSet const &ds); 00174 void GuessFromModality(const char *modality, unsigned int dimension = 2); 00175 00176 friend std::ostream &operator<<(std::ostream &os, const MediaStorage &ms); 00177 00178 bool IsUndefined() const { return MSField == MS_END; } 00179 00180 protected: 00181 void SetFromSourceImageSequence(DataSet const &ds); 00182 00183 private: 00184 bool SetFromDataSetOrHeader(DataSet const &ds, const Tag & tag); 00186 const char* GetFromDataSetOrHeader(DataSet const &ds, const Tag & tag); 00188 const char* GetFromHeader(FileMetaInformation const &fmi); 00190 const char* GetFromDataSet(DataSet const &ds); 00191 00192 private: 00193 MSType MSField; 00194 }; 00195 //----------------------------------------------------------------------------- 00196 inline std::ostream &operator<<(std::ostream &_os, const MediaStorage &ms) 00197 { 00198 const char *msstring = MediaStorage::GetMSString(ms); 00199 _os << (msstring ? msstring : "INVALID MEDIA STORAGE"); 00200 return _os; 00201 00202 } 00203 00204 } // end namespace gdcm 00205 00206 #endif // GDCMMEDIASTORAGE_H