X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;ds=sidebyside;f=src%2FgdcmPixelConvert.h;h=074db2ba22c52362815e112674491c8a46063087;hb=0b01703cc07d46a6ae718e01c6beee14599a9da1;hp=784c2e0e6b81cad59a94c8c9f7e60b67403c7404;hpb=c132b43ebda61490fe85f62a88969b6cfb9e400d;p=gdcm.git diff --git a/src/gdcmPixelConvert.h b/src/gdcmPixelConvert.h index 784c2e0e..074db2ba 100644 --- a/src/gdcmPixelConvert.h +++ b/src/gdcmPixelConvert.h @@ -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 @@ -18,30 +18,84 @@ #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