]> Creatis software - gdcm.git/blobdiff - src/gdcmFile.h
Fix mistypings
[gdcm.git] / src / gdcmFile.h
index da097692bcaa53af0423387cdc766a2f5a3b541b..86866908f34f68c5ded235aab4d5862a13ba5657 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmFile.h,v $
   Language:  C++
-  Date:      $Date: 2005/01/08 15:03:59 $
-  Version:   $Revision: 1.92 $
+  Date:      $Date: 2007/09/17 12:16:02 $
+  Version:   $Revision: 1.134 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
                                                                                 
 =========================================================================*/
 
-#ifndef GDCMFILE_H
-#define GDCMFILE_H
+#ifndef _GDCMFILE_H_
+#define _GDCMFILE_H_
 
-#include <iostream>
-#include "gdcmBase.h"
+#include "gdcmDebug.h"
+#include "gdcmDocument.h"
+#include "gdcmTagKey.h"
 
-namespace gdcm 
+
+namespace GDCM_NAME_SPACE 
 {
-class Header;
-class ValEntry;
-class BinEntry;
-class PixelReadConvert;
-class PixelWriteConvert;
-class DocEntryArchive;
+
+class RLEFramesInfo;
+class JPEGFragmentsInfo;
+
+//-----------------------------------------------------------------------------
+// Dicom Part 3.3 Compliant
+enum ModalityType {
+   Unknow,
+   AU,       // Voice Audio
+   AS,       // Angioscopy
+   BI,       // Biomagnetic Imaging
+   CF,       // Cinefluorography
+   CP,       // Culposcopy
+   CR,       // Computed Radiography
+   CS,       // Cystoscopy
+   CT,       // Computed Tomography
+   DD,       // Duplex Dopler
+   DF,       // Digital Fluoroscopy
+   DG,       // Diaphanography
+   DM,       // Digital Microscopy
+   DS,       // Digital Substraction Angiography
+   DX,       // Digital Radiography
+   ECG,      // Echocardiography
+   EPS,      // Basic Cardiac EP
+   ES,       // Endoscopy
+   FA,       // Fluorescein Angiography
+   FS,       // Fundoscopy
+   HC,       // Hard Copy
+   HD,       // Hemodynamic
+   LP,       // Laparoscopy
+   LS,       // Laser Surface Scan
+   MA,       // Magnetic Resonance Angiography
+   MR,       // Magnetic Resonance
+   NM,       // Nuclear Medicine
+   OT,       // Other
+   PT,       // Positron Emission Tomography
+   RF,       // Radio Fluoroscopy
+   RG,       // Radiographic Imaging
+   RTDOSE,   // Radiotherapy Dose
+   RTIMAGE,  // Radiotherapy Image
+   RTPLAN,   // Radiotherapy Plan
+   RTSTRUCT, // Radiotherapy Structure Set
+   SM,       // Microscopic Imaging
+   ST,       // Single-photon Emission Computed Tomography
+   TG,       // Thermography
+   US,       // Ultrasound
+   VF,       // Videofluorography
+   XA,       // X-Ray Angiography
+   XC        // Photographic Imaging
+};
+
 //-----------------------------------------------------------------------------
-/*
- * In addition to Dicom header exploration, this class is designed
- * for accessing the image/volume content. One can also use it to
- * write Dicom/ACR-NEMA/RAW files.
+
+/**
+ * \brief DICOM elements and their corresponding values (and
+ * additionaly the corresponding DICOM dictionary entry) of the header
+ * of a DICOM file.
+ *
+ * The typical usage of instances of class File is to classify a set of
+ * dicom files according to header information e.g. to create a file hierarchy
+ * reflecting the Patient/Study/Serie informations, or extracting a given
+ * SerieId. Accessing the content (image[s] or volume[s]) is beyond the
+ * functionality of this class and belongs to gdcm::FileHelper.
+ * \note  The various entries of the explicit value representation (VR) shall
+ *        be managed within a dictionary which is shared by all File
+ *        instances.
+ * \note  The File::Set*Tag* family members cannot be defined as
+ *        protected due to Swig limitations for as Has_a dependency between
+ *        File and FileHelper.
  */
-class GDCM_EXPORT File : public Base
+class GDCM_EXPORT File : public Document
 {
+   gdcmTypeMacro(File);
+
 public:
-   enum FileMode
-   {
-      WMODE_RAW,
-      WMODE_RGB
-   };
+   static File *New() {return new File();}
+
+   // Loading
+  // GDCM_LEGACY(bool Load( std::string const &filename ))
+   bool Load();
+   // Standard values and informations contained in the header
+   bool IsReadable();
+
+   void SetFourthDimensionLocation(uint16_t group, uint16_t elem) {
+                   FourthDimensionLocation = TagKey(group, elem); }
+
+   // Some heuristic based accessors, end user intended
+   int GetImageNumber();
+   ModalityType GetModality();
+
+   int GetXSize();
+   int GetYSize();
+   int GetZSize();
+   int GetTSize(); // unnormalized in DICOM V3
+
+   bool GetSpacing(float &xspacing, float &yspacing, float &zspacing);
+   float GetXSpacing();
+   float GetYSpacing();
+   float GetZSpacing();
+
+   float GetXOrigin();
+   float GetYOrigin();
+   float GetZOrigin();
+
+   float GetXCosineOnX();
+   float GetXCosineOnY();  
+   float GetXCosineOnZ();
+   float GetYCosineOnX();
+   float GetYCosineOnY();  
+   float GetYCosineOnZ();   
      
-public:
-   File( );
-   File( Header *header );
-   File( std::string const &filename );
-   virtual ~File();
-
-   void Print(std::ostream &os = std::cout); 
-
-   /// Accessor to \ref Header
-   Header *GetHeader() { return HeaderInternal; }
-
-   size_t GetImageDataSize();
-   size_t GetImageDataRawSize();
-
-   uint8_t *GetImageData();
-   uint8_t *GetImageDataRaw();
-   size_t GetImageDataIntoVector(void *destination, size_t maxSize);
-
-   void SetImageData(uint8_t *data, size_t expectedSize);
-
-   // User datas
-   void SetUserData(uint8_t *data, size_t expectedSize);
-   uint8_t* GetUserData();
-   size_t GetUserDataSize();
-   // RBG datas (from file
-   uint8_t* GetRGBData();
-   size_t GetRGBDataSize();
-   // RAW datas (from file
-   uint8_t* GetRawData();
-   size_t GetRawDataSize();
-
-   // Write pixels of ONE image on hard drive
-   // No test is made on processor "endianity"
-   // The user must call his reader correctly
-   bool WriteRawData  (std::string const &fileName);
-   bool WriteDcmImplVR(std::string const &fileName);
-   bool WriteDcmExplVR(std::string const &fileName);
-   bool WriteAcr      (std::string const &fileName);
-   bool Write         (std::string const &fileName);
-
-   bool SetEntry(std::string const &content,
-                 uint16_t group, uint16_t element);
-   bool SetEntry(uint8_t *content, int lgth,
-                 uint16_t group, uint16_t element);
-   bool ReplaceOrCreate(std::string const &content,
-                        uint16_t group, uint16_t element);
-   bool ReplaceOrCreate(uint8_t *binArea, int lgth,
-                        uint16_t group, uint16_t element);
-
-   uint8_t* GetLutRGBA();
-
-   // Write mode
-   void SetWriteModeToRaw() { SetWriteMode(WMODE_RAW); };
-   void SetWriteModeToRGB()          { SetWriteMode(WMODE_RGB); };
-   void SetWriteMode(FileMode mode)  { WriteMode = mode; };
-   FileMode GetWriteMode()           { return WriteMode; };
-
-   // Write format
-   void SetWriteTypeToDcmImplVR()     { SetWriteType(ImplicitVR); };
-   void SetWriteTypeToDcmExplVR()     { SetWriteType(ExplicitVR); };
-   void SetWriteTypeToAcr()           { SetWriteType(ACR); };
-   void SetWriteTypeToAcrLibido()     { SetWriteType(ACR_LIBIDO); };
-   void SetWriteType(FileType format) { WriteType = format; };
-   FileType GetWriteType()            { return WriteType; };
+   bool GetImageOrientationPatient( float iop[6] );
+   bool GetImagePositionPatient( float ipp[3] );
+   
+   int GetBitsStored();
+   int GetBitsAllocated();
+   int GetHighBitPosition();
+   int GetSamplesPerPixel();
+   int GetPlanarConfiguration();
+   int GetPixelSize();
+   std::string GetPixelType();
+   bool IsSignedPixelData();
+   bool IsMonochrome();
+   bool IsMonochrome1();
+   bool IsPaletteColor();
+   bool IsYBRFull();
+
+   bool HasLUT();
+   int GetLUTNbits();
+
+   // For rescaling graylevel:
+   bool GetRescaleSlopeIntercept(double &slope, double &intercept);   
+   double GetRescaleIntercept();
+   double GetRescaleSlope();
+
+   int GetNumberOfScalarComponents();
+   int GetNumberOfScalarComponentsRaw();
+
+   /// Accessor to  File::GrPixel
+   uint16_t GetGrPixel()  { return GrPixel; }
+   /// Accessor to  File::NumPixel
+   uint16_t GetNumPixel() { return NumPixel; }
+
+   size_t GetPixelOffset();
+   size_t GetPixelAreaLength();
+
+   /// returns the RLE info
+   RLEFramesInfo *GetRLEInfo() { return RLEInfo; }
+   /// Returns the JPEG Fragments info
+   JPEGFragmentsInfo *GetJPEGInfo() { return JPEGInfo; }
+
+// Anonymization process
+   void AddAnonymizeElement (uint16_t group, uint16_t elem, 
+                             std::string const &value);
+   /// Clears the list of elements to be anonymized
+   void ClearAnonymizeList() { UserAnonymizeList.clear(); }      
+   void AnonymizeNoLoad();
+   /// Replace patient's own information by info from the Anonymization list
+   bool AnonymizeFile();
+
+   bool Write(std::string fileName, FileType filetype);
 
 protected:
-   bool CheckWriteIntegrity();
-
-   void SetWriteToRaw();
-   void SetWriteToRGB();
-   void RestoreWrite();
-
-   void SetWriteFileTypeToACR();
-   void SetWriteFileTypeToExplicitVR();
-   void SetWriteFileTypeToImplicitVR();
-   void RestoreWriteFileType();
-
-   void SetWriteToLibido();
-   void SetWriteToNoLibido();
-   void RestoreWriteOfLibido();
-
-   ValEntry *CopyValEntry(uint16_t group,uint16_t element);
-   BinEntry *CopyBinEntry(uint16_t group,uint16_t element);
+   File();
+   virtual ~File();
+   /// \brief Protect the Writer from writing illegal groups
+   bool MayIWrite(uint16_t group)
+     { if (group < 8 &&  group !=2 ) return false; else return true; }
+      
+   /// Store the RLE frames info obtained during parsing of pixels.
+   RLEFramesInfo *RLEInfo;
+   /// Store the JPEG fragments info obtained during parsing of pixels.
+   JPEGFragmentsInfo *JPEGInfo;
+
+   /// \brief In some cases (e.g. for some ACR-NEMA images) the 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. 
+   uint16_t NumPixel;
+   /// \brief 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.
+   uint16_t GrPixel;
+   /// \brief allows user to tell gdcm in which DataElement is stored 
+   ///the -unnormalized- 4th Dimension   
+   TagKey FourthDimensionLocation;
 
 private:
-   void Initialise();
-
-   uint8_t *GetRaw();
-
-// members variables:
-   /// Header to use to load the file
-   Header *HeaderInternal;
-
-   /// \brief Whether the underlying \ref Header was loaded by
-   ///  the constructor or passed to the constructor. When false
-   ///  the destructor is in charge of deletion.
-   bool SelfHeader;
-   
-   /// Wether already parsed or not
-   bool Parsed;
-
-   /// Utility pixel converter
-   PixelReadConvert *PixelReadConverter;
-   PixelWriteConvert *PixelWriteConverter;
-
-   // Utility header archive
-   DocEntryArchive *Archive;
+   bool DoTheLoadingJob();
+   void ComputeRLEInfo();
+   void ComputeJPEGFragmentInfo();
+   bool     ReadTag(uint16_t, uint16_t);
+   uint32_t ReadTagLength(uint16_t, uint16_t);
+   void ReadEncapsulatedBasicOffsetTable();
+   uint32_t *BasicOffsetTableItemValue;
 
-   // Write variables
-   FileMode WriteMode;
-   FileType WriteType;
 };
 } // end namespace gdcm