X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmHeader.h;h=3d8564140d646e4667f2b6484dabee3427d903b1;hb=279aed8cb3483318205a8b652e05457a7fc94dec;hp=1ddff5a0b1de7542a642716a93228ce19240fbb8;hpb=bafdfafe6c1b30607035fc4018c0405169b348e8;p=gdcm.git diff --git a/src/gdcmHeader.h b/src/gdcmHeader.h index 1ddff5a0..3d856414 100644 --- a/src/gdcmHeader.h +++ b/src/gdcmHeader.h @@ -7,8 +7,7 @@ #include "gdcmParser.h" //----------------------------------------------------------------------------- -/* - * \defgroup gdcmHeader +/** * \brief * The purpose of an instance of gdcmHeader is to act as a container of * all the DICOM elements and their corresponding values (and @@ -29,15 +28,36 @@ */ class GDCM_EXPORT gdcmHeader : public gdcmParser { +protected: + /// In some cases (e.g. for some ACR-NEMA images) the Header Entry Element + /// Number of the 'Pixel Element' is *not* found at 0x0010. In order to + /// make things easier the parser shall store the proper value in + /// NumPixel to provide a unique access facility. See also the constructor + /// \ref gdcmHeader::gdcmHeader + guint16 NumPixel; + /// In some cases (e.g. for some ACR-NEMA images) the header entry for + /// the group of pixels is *not* found at 0x7fe0. In order to + /// make things easier the parser shall store the proper value in + /// GrPixel to provide a unique access facility. See also the constructor + /// \ref gdcmHeader::gdcmHeader + guint16 GrPixel; + /// Some DICOM files may contain several images (e.g. a icon, followd by + /// the image itself. Hence the tag (GrPixel,NumPixel) might appear + /// several times. countGrPixel is the number of occurences of the + /// tag of pixels (i.e. (GrPixel,NumPixel)) contained in the header. + /// TODO : will be dealt with SQ tree-like stucture + int countGrPixel; public: gdcmHeader(bool exception_on_error = false); gdcmHeader(const char *filename, bool exception_on_error = false, - bool enable_sequences = false); - + bool enable_sequences = false, + bool skip_shadow = false); + virtual ~gdcmHeader(); -// Standard values and informations contained in the header + // Standard values and informations contained in the header + virtual bool IsReadable(void); bool IsJPEGBaseLineProcess1TransferSyntax(void); bool IsJPEGExtendedProcess2_4TransferSyntax(void); bool IsJPEGExtendedProcess3_5TransferSyntax(void); @@ -48,8 +68,8 @@ public: bool IsDicomV3(void); // Some heuristic based accessors, end user intended - // (to be move to gdcmHeaderHelper?) - int GetXSize(void); + // (to be moved to gdcmHeaderHelper?) + int GetXSize(void); int GetYSize(void); int GetZSize(void); int GetBitsStored(void); @@ -77,31 +97,64 @@ public: // TODO Swig int SetShaDict(std::string filename); // TODO Swig int SetPubDict(std::string filename); + + /// Accessor to \ref gdcmHeader::GrPixel + guint16 GetGrPixel(void) {return GrPixel;} + + /// Accessor to \ref gdcmHeader::NumPixel + guint16 GetNumPixel(void) {return NumPixel;} // Entry - inline virtual std::string GetEntryByName (std::string tagName) - { return(gdcmParser::GetEntryByName(tagName)); } - inline virtual std::string GetEntryVRByName (std::string tagName) - { return(gdcmParser::GetEntryVRByName(tagName)); } + +// These functions are necessary for Python because +// there are protected in the parent class + inline virtual std::string GetEntryByNumber (guint16 group, guint16 element) { return(gdcmParser::GetEntryByNumber(group,element)); } + inline virtual std::string GetEntryVRByNumber(guint16 group, guint16 element) { return(gdcmParser::GetEntryVRByNumber(group,element)); } - + + inline virtual int GetEntryLengthByNumber(guint16 group, guint16 element) + { return(gdcmParser::GetEntryLengthByNumber(group,element)); } + + inline virtual std::string GetEntryByName (std::string tagName) + { return(gdcmParser::GetEntryByName(tagName)); } + + inline virtual std::string GetEntryVRByName (std::string tagName) + { return(gdcmParser::GetEntryVRByName(tagName)); } + + inline virtual bool SetEntryByNumber(std::string content, + guint16 group, guint16 element) + { return(gdcmParser::SetEntryByNumber(content,group,element)); } + inline virtual bool SetEntryByName(std::string content,std::string tagName) { return(gdcmParser::SetEntryByName(content,tagName)); } - inline virtual bool SetEntryByNumber(std::string content,guint16 group, guint16 element) - { return(gdcmParser::SetEntryByNumber(content,group,element)); } + inline virtual bool SetEntryLengthByNumber(guint32 l, + guint16 group, guint16 element) + { return(gdcmParser::SetEntryLengthByNumber(l,group,element)); } + + inline virtual void UpdateShaEntries(void) + { gdcmParser::UpdateShaEntries(); } -// Read (used in gdcmFile) + /// Read (used in gdcmFile) void SetImageDataSize(size_t ExpectedSize); -protected: - int write(std::ostream&); - int anonymize(std::ostream&); // FIXME : anonymize should be a friend ? + bool operator<(gdcmHeader &header); + bool WriteEntry(gdcmHeaderEntry *tag,FILE *_fp,FileType type); + + + virtual void PrintEntryNoSQ (std::ostream &os = std::cout); + virtual void PrintEntryNiceSQ(std::ostream &os = std::cout); + +protected: + //CLEANME int write(std::ostream&); + //CLEANME int anonymize(std::ostream&);//FIXME: anonymize should be a friend + bool anonymizeHeader(void); private: + }; //-----------------------------------------------------------------------------