]> Creatis software - gdcm.git/blobdiff - src/gdcmPixelConvert.h
* Amelioration of code, remove some code copy. For the loading of
[gdcm.git] / src / gdcmPixelConvert.h
index 784c2e0e6b81cad59a94c8c9f7e60b67403c7404..074db2ba22c52362815e112674491c8a46063087 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmPixelConvert.h,v $
   Language:  C++
-  Date:      $Date: 2004/10/15 10:43:28 $
-  Version:   $Revision: 1.9 $
+  Date:      $Date: 2004/10/25 04:08:20 $
+  Version:   $Revision: 1.14 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
 
 
 #ifndef GDCMPIXELCONVERT_H
-#define GDCMPIXELCONVERTL_H
+#define GDCMPIXELCONVERT_H
 
 #include "gdcmCommon.h"
 #include "gdcmRLEFramesInfo.h"
 #include "gdcmJPEGFragmentsInfo.h"
 #include "gdcmException.h"
+#include "gdcmHeader.h"
 
 namespace gdcm
 {
-                                                                                
 /*
  * \brief Utility container for gathering the various forms the pixel data
  *        migth take during the user demanded processes.
  */
-class GDCM_EXPORT PixelConvert {
-friend class File;
-   /// Pixel data represented as RGB after color interpretation
+class GDCM_EXPORT PixelConvert
+{
+public:
+   PixelConvert();
+   ~PixelConvert();
+
+   //// Getter accessors:
+   uint8_t* GetRGB() { return RGB; }
+   size_t   GetRGBSize() { return RGBSize; }
+   uint8_t* GetDecompressed() { return Decompressed; }
+   size_t   GetDecompressedSize() { return DecompressedSize; }
+   uint8_t* GetLutRGBA() { return LutRGBA; }
+
+   //// Predicates:
+   bool IsDecompressedRGB();
+
+   void Print( std::string indent = "", std::ostream &os = std::cout );
+
+// In progress
+   void GrabInformationsFromHeader( Header* header );
+   bool ReadAndDecompressPixelData( std::ifstream* fp );
+   void Squeeze();
+   bool BuildRGBImage();
+
+private:
+   // Use the fp:
+   bool ReadAndDecompressRLEFragment(
+                  uint8_t* subDecompressed,
+                  long fragmentSize,
+                  long decompressedSegmentSize,
+                  std::ifstream* fp );
+   void ReadAndDecompress12BitsTo16Bits( std::ifstream* fp ) throw ( FormatError );
+   bool ReadAndDecompressRLEFile( std::ifstream* fp );
+   bool ReadAndDecompressJPEGFile( std::ifstream* fp );
+   void BuildLUTRGBA( std::ifstream* fp );
+
+   // In place (within Decompressed and with no fp access) decompression
+   // or convertion:
+   void BuildLUTRGBA();
+   bool DecompressRLE16BitsFromRLE8Bits( int NumberOfFrames );
+   void ConvertSwapZone();
+   void ConvertReorderEndianity();
+   bool ConvertReArrangeBits() throw ( FormatError );
+   void ConvertRGBPlanesToRGBPixels();
+   void ConvertYcBcRPlanesToRGBPixels();
+   void ConvertHandleColor();
+
+   void ComputeDecompressedAndRGBSizes();
+   void AllocateRGB();
+   void AllocateDecompressed();
+
+// Variables
+   /// Pixel data represented as RGB after LUT color interpretation.
    uint8_t* RGB;
-   size_t   RGBSize;          //aka ImageDataSize
+   /// Size of \ref RGB image.
+   size_t   RGBSize;
    /// Pixel data after decompression and bit/byte rearrangement.
    uint8_t* Decompressed;
+   /// Size of \ref Decompressed image.
    size_t   DecompressedSize;
+   /// \brief Red/Green/Blue/Alpha LookUpTable build out of the
+   ///        Red/Green/Blue LUT descriptors (see \ref BuildLUTRGBA ).
+   uint8_t* LutRGBA;
 
-   // Set by the accessors:
    size_t PixelOffset;
    size_t PixelDataLength;
    int XSize;
@@ -55,7 +109,7 @@ friend class File;
    bool PixelSign;
    int SwapCode;
 
-   bool IsUncompressed;
+   bool IsDecompressed;
    bool IsJPEG2000;
    bool IsJPEGLossless;
    bool IsRLELossless;
@@ -69,88 +123,14 @@ friend class File;
    bool IsPaletteColor;
    bool IsYBRFull;
    bool HasLUT;
+   // The 3 LUT descriptors may be different:
+   std::string LutRedDescriptor;
+   std::string LutGreenDescriptor;
+   std::string LutBlueDescriptor;
+   uint8_t* LutRedData;
+   uint8_t* LutGreenData;
+   uint8_t* LutBlueData;
 
-public:
-   PixelConvert();
-   ~PixelConvert();
-
-   //// Setter accessors:
-   void SetXSize( int xSize ) { XSize = xSize; }
-   void SetYSize( int ySize ) { YSize = ySize; }
-   void SetZSize( int zSize ) { ZSize = zSize; }
-   void SetBitsAllocated( int bitsAllocated ) { BitsAllocated = bitsAllocated; }
-   void SetBitsStored( int bitsStored ) { BitsStored = bitsStored; }
-   void SetHighBitPosition( int highBitPosition )
-           { HighBitPosition = highBitPosition; }
-   void SetSamplesPerPixel( int samplesPerPixel )
-           { SamplesPerPixel = samplesPerPixel; }
-   void SetPixelSize( int pixelSize ) { PixelSize = pixelSize; }
-   void SetPixelSign( int pixelSign ) { PixelSign = pixelSign; }
-   void SetSwapCode( int swapCode ) { SwapCode = swapCode; }
-   void SetIsUncompressed( bool isUncompressed )
-           { IsUncompressed = isUncompressed; }
-   void SetIsJPEG2000( bool isJPEG2000 ) { IsJPEG2000 = isJPEG2000; }
-   void SetIsJPEGLossless( bool isJPEGLossless )
-           { IsJPEGLossless = isJPEGLossless; }
-   void SetIsRLELossless( bool isRLELossless )
-           { IsRLELossless = isRLELossless; }
-   void SetPixelOffset( size_t pixelOffset ) { PixelOffset = pixelOffset; }
-   void SetPixelDataLength( size_t pixelDataLength )
-           { PixelDataLength = pixelDataLength; }
-   void SetRLEInfo( RLEFramesInfo* inRLEFramesInfo )
-           { RLEInfo = inRLEFramesInfo; }
-   void SetJPEGInfo( JPEGFragmentsInfo* inJPEGFragmentsInfo )
-           { JPEGInfo = inJPEGFragmentsInfo; }
-
-   void SetPlanarConfiguration( size_t planarConfiguration )
-           { PlanarConfiguration = planarConfiguration; }
-   void SetIsMonochrome( bool isMonochrome ) { IsMonochrome = isMonochrome; }
-   void SetIsPaletteColor( bool isPaletteColor )
-           { IsPaletteColor = isPaletteColor; }
-   void SetIsYBRFull( bool isYBRFull ) { IsYBRFull = isYBRFull; }
-   void SetHasLUT ( bool hasLUT ) { HasLUT = hasLUT; }
-   void     SetRGBSize( size_t size ) { RGBSize = size; }
-   void     SetDecompressedSize( size_t size ) { DecompressedSize = size; }
-
-   //// Getter accessors:
-   uint8_t* GetRGB() { return RGB; }
-   size_t   GetRGBSize() { return RGBSize; }
-   uint8_t* GetDecompressed() { return Decompressed; }
-   size_t   GetDecompressedSize() { return DecompressedSize; }
-
-   //// Predicates:
-   bool IsDecompressedRGB();
-
-//////////////////////////////////////////////////////////
-private:
-   // Use the fp:
-   bool ReadAndDecompressRLEFragment(
-                  uint8_t* decodedZone,
-                  long fragmentSize,
-                  long uncompressedSegmentSize,
-                  FILE* fp );
-   void ReadAndDecompress12BitsTo16Bits( FILE* fp ) throw ( FormatError );
-   bool ReadAndDecompressRLEFile( FILE* fp );
-   bool ReadAndDecompressJPEGFile( FILE* fp );
-
-   // In place (within Decompressed and with no fp access) decompression
-   // or convertion:
-   bool DecompressRLE16BitsFromRLE8Bits( int NumberOfFrames );
-   void ConvertSwapZone();
-   void ConvertReorderEndianity();
-   bool ConvertReArrangeBits() throw ( FormatError );
-   void ConvertRGBPlanesToRGBPixels();
-   void ConvertYcBcRPlanesToRGBPixels();
-   void ConvertHandleColor();
-
-   void ComputeDecompressedImageDataSize();
-   void AllocateRGB();
-   void AllocateDecompressed();
-public:
-// In progress
-   bool ReadAndDecompressPixelData( FILE* fp );
-   void Squeeze();
 };
 } // end namespace gdcm