Program: gdcm
Module: $RCSfile: gdcmPixelConvert.h,v $
Language: C++
- Date: $Date: 2004/10/10 16:44:00 $
- Version: $Revision: 1.5 $
+ Date: $Date: 2004/10/22 03:05:42 $
+ Version: $Revision: 1.13 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
#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 gdcmPixelConvert {
-friend class gdcmFile;
- /// Pixel data represented as RGB after color interpretation
- uint8_t* RGB;
- size_t RGBSize; //aka ImageDataSize
- /// Pixel data after decompression and bit/byte rearrangement.
- uint8_t* Uncompressed;
- size_t UncompressedSize;
+class GDCM_EXPORT PixelConvert {
public:
- gdcmPixelConvert();
- ~gdcmPixelConvert();
+ PixelConvert();
+ ~PixelConvert();
+ //// Getter accessors:
uint8_t* GetRGB() { return RGB; }
- void SetRGBSize( size_t size ) { RGBSize = size; }
size_t GetRGBSize() { return RGBSize; }
- void AllocateRGB();
+ uint8_t* GetDecompressed() { return Decompressed; }
+ size_t GetDecompressedSize() { return DecompressedSize; }
+ uint8_t* GetLutRGBA() { return LutRGBA; }
- uint8_t* GetUncompressed() { return Uncompressed; }
- void SetUncompressedSize( size_t size ) { UncompressedSize = size; }
- size_t GetUncompressedSize() { return UncompressedSize; }
- void AllocateUncompressed();
+ //// Predicates:
+ bool IsDecompressedRGB();
+
+ void Print( std::string indent = "", std::ostream &os = std::cout );
- void Squeeze();
-//////////////////////////////////////////////////////////
// In progress
- static bool UncompressRLE16BitsFromRLE8Bits(
- int XSize,
- int YSize,
- int NumberOfFrames,
- uint8_t* fixMemUncompressed );
- static bool ReadAndUncompressRLEFragment(
- uint8_t* decodedZone,
+ 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 uncompressedSegmentSize,
- FILE* fp );
- static bool ReadAndDecompressRLEFile(
- void* image_buffer,
- int XSize,
- int YSize,
- int ZSize,
- int BitsAllocated,
- gdcmRLEFramesInfo* RLEInfo,
- FILE* fp );
- static void ConvertDecompress12BitsTo16Bits(
- uint8_t* pixelZone,
- int sizeX,
- int sizeY,
- FILE* filePtr) throw ( gdcmFormatError );
- static void SwapZone(void* im, int swap, int lgr, int nb);
- static void ConvertReorderEndianity(
- uint8_t* pixelZone,
- size_t imageDataSize,
- int numberBitsStored,
- int numberBitsAllocated,
- int swapCode,
- bool signedPixel );
- static bool ReadAndDecompressJPEGFile(
- uint8_t* destination,
- int XSize,
- int YSize,
- int BitsAllocated,
- int BitsStored,
- int SamplesPerPixel,
- int PixelSize,
- bool isJPEG2000,
- bool isJPEGLossless,
- gdcmJPEGFragmentsInfo* JPEGInfo,
- FILE* fp );
- static bool gdcmPixelConvert::ConvertReArrangeBits(
- uint8_t* pixelZone,
- size_t imageDataSize,
- int numberBitsStored,
- int numberBitsAllocated,
- int highBitPosition ) throw ( gdcmFormatError );
+ 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 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;
+
+ size_t PixelOffset;
+ size_t PixelDataLength;
+ int XSize;
+ int YSize;
+ int ZSize;
+ int BitsAllocated;
+ int BitsStored;
+ int HighBitPosition;
+ int SamplesPerPixel;
+ int PixelSize;
+ bool PixelSign;
+ int SwapCode;
+
+ bool IsDecompressed;
+ bool IsJPEG2000;
+ bool IsJPEGLossless;
+ bool IsRLELossless;
+
+ RLEFramesInfo* RLEInfo;
+ JPEGFragmentsInfo* JPEGInfo;
+ // For handling color stage
+ int PlanarConfiguration;
+ bool IsMonochrome;
+ 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;
};
+} // end namespace gdcm
//-----------------------------------------------------------------------------
#endif