X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmFile.h;h=86866908f34f68c5ded235aab4d5862a13ba5657;hb=721d134c6e594b9a23bf1ce002ed87bfbc1576a7;hp=d7d8a6566e3b2b654c0476fa33b3f82df1e18ed2;hpb=0ad9dae4659b21bfd5c834c1af724eab4dcdf4f6;p=gdcm.git diff --git a/src/gdcmFile.h b/src/gdcmFile.h index d7d8a656..86866908 100644 --- a/src/gdcmFile.h +++ b/src/gdcmFile.h @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmFile.h,v $ Language: C++ - Date: $Date: 2005/01/23 10:12:34 $ - Version: $Revision: 1.99 $ + 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 @@ -16,14 +16,20 @@ =========================================================================*/ -#ifndef GDCMFILE_H -#define GDCMFILE_H +#ifndef _GDCMFILE_H_ +#define _GDCMFILE_H_ +#include "gdcmDebug.h" #include "gdcmDocument.h" +#include "gdcmTagKey.h" -namespace gdcm + +namespace GDCM_NAME_SPACE { +class RLEFramesInfo; +class JPEGFragmentsInfo; + //----------------------------------------------------------------------------- // Dicom Part 3.3 Compliant enum ModalityType { @@ -72,6 +78,7 @@ enum ModalityType { }; //----------------------------------------------------------------------------- + /** * \brief DICOM elements and their corresponding values (and * additionaly the corresponding DICOM dictionary entry) of the header @@ -81,7 +88,7 @@ enum ModalityType { * 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 gdmcFile. + * 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. @@ -89,93 +96,132 @@ enum ModalityType { * protected due to Swig limitations for as Has_a dependency between * File and FileHelper. */ - -//----------------------------------------------------------------------------- - class GDCM_EXPORT File : public Document { -protected: - /// \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; + gdcmTypeMacro(File); public: - File(); - File( std::string const &filename ); - - ~File(); + 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(); - // Some heuristic based accessors, end user intended + 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(); + + bool GetImageOrientationPatient( float iop[6] ); + bool GetImagePositionPatient( float ipp[3] ); + int GetBitsStored(); int GetBitsAllocated(); + int GetHighBitPosition(); int GetSamplesPerPixel(); int GetPlanarConfiguration(); int GetPixelSize(); - int GetHighBitPosition(); + std::string GetPixelType(); bool IsSignedPixelData(); bool IsMonochrome(); + bool IsMonochrome1(); bool IsPaletteColor(); bool IsYBRFull(); - std::string GetPixelType(); - size_t GetPixelOffset(); - size_t GetPixelAreaLength(); - - //Some image informations needed for third package imaging library - int GetXSize(); - int GetYSize(); - int GetZSize(); - - float GetXSpacing(); - float GetYSpacing(); - float GetZSpacing(); + bool HasLUT(); + int GetLUTNbits(); // For rescaling graylevel: - float GetRescaleIntercept(); - float GetRescaleSlope(); + bool GetRescaleSlopeIntercept(double &slope, double &intercept); + double GetRescaleIntercept(); + double GetRescaleSlope(); int GetNumberOfScalarComponents(); int GetNumberOfScalarComponentsRaw(); - // To organize DICOM files based on their x,y,z position - void GetImageOrientationPatient( float iop[6] ); - - int GetImageNumber(); - ModalityType GetModality(); - - float GetXOrigin(); - float GetYOrigin(); - float GetZOrigin(); - - bool HasLUT(); - int GetLUTNbits(); - - /// Accessor to \ref File::GrPixel + /// Accessor to File::GrPixel uint16_t GetGrPixel() { return GrPixel; } - - /// Accessor to \ref File::NumPixel + /// 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); - /// Initialize DICOM File when none - void InitializeDefaultFile(); - protected: - /// Replace patient's specific information by 'anonymous' - bool AnonymizeFile(); + 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: + bool DoTheLoadingJob(); + void ComputeRLEInfo(); + void ComputeJPEGFragmentInfo(); + bool ReadTag(uint16_t, uint16_t); + uint32_t ReadTagLength(uint16_t, uint16_t); + void ReadEncapsulatedBasicOffsetTable(); + uint32_t *BasicOffsetTableItemValue; }; } // end namespace gdcm