]> Creatis software - gdcm.git/blobdiff - src/gdcmHeader.h
2004-04-28 Jean-Pierre Roux
[gdcm.git] / src / gdcmHeader.h
index 7c486e83ff73f4f51cde6eddf92467db5742a200..273305c11160e301a8a4606606a4c462d4ff9e41 100644 (file)
@@ -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
  */
 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  skip_shadow        = 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); 
@@ -50,7 +68,7 @@ public:
    bool IsDicomV3(void); 
 
    // Some heuristic based accessors, end user intended 
-   // (to be move to gdcmHeaderHelper?) 
+   // (to be moved to gdcmHeaderHelper?) 
    int GetXSize(void);
    int GetYSize(void);
    int GetZSize(void);
@@ -79,37 +97,59 @@ 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 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)
+   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 SetEntryLengthByNumber(guint32 l,guint16 group, guint16 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:
 
 };