X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmPixelConvert.h;h=784c2e0e6b81cad59a94c8c9f7e60b67403c7404;hb=40b909789581894e57a0d8f22d6f1f91f55e7f84;hp=0ac94ca4131c66422e41f0da1ff699e8fcfb6e85;hpb=1d69b92978803204089d270599133917d944c651;p=gdcm.git diff --git a/src/gdcmPixelConvert.h b/src/gdcmPixelConvert.h index 0ac94ca4..784c2e0e 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/12 04:35:47 $ - Version: $Revision: 1.6 $ + Date: $Date: 2004/10/15 10:43:28 $ + Version: $Revision: 1.9 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -25,9 +25,9 @@ #include "gdcmJPEGFragmentsInfo.h" #include "gdcmException.h" -namespace gdcm +namespace gdcm { - + /* * \brief Utility container for gathering the various forms the pixel data * migth take during the user demanded processes. @@ -38,77 +38,121 @@ friend class File; uint8_t* RGB; size_t RGBSize; //aka ImageDataSize /// Pixel data after decompression and bit/byte rearrangement. - uint8_t* Uncompressed; - size_t UncompressedSize; + uint8_t* Decompressed; + size_t DecompressedSize; + + // Set by the accessors: + 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 IsUncompressed; + bool IsJPEG2000; + bool IsJPEGLossless; + bool IsRLELossless; + + RLEFramesInfo* RLEInfo; + JPEGFragmentsInfo* JPEGInfo; + + // For handling color stage + int PlanarConfiguration; + bool IsMonochrome; + bool IsPaletteColor; + bool IsYBRFull; + bool HasLUT; + public: PixelConvert(); ~PixelConvert(); - uint8_t* GetRGB() { return RGB; } + //// 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; } - void AllocateRGB(); + uint8_t* GetDecompressed() { return Decompressed; } + size_t GetDecompressedSize() { return DecompressedSize; } - uint8_t* GetUncompressed() { return Uncompressed; } - void SetUncompressedSize( size_t size ) { UncompressedSize = size; } - size_t GetUncompressedSize() { return UncompressedSize; } - void AllocateUncompressed(); + //// Predicates: + bool IsDecompressedRGB(); - void Squeeze(); ////////////////////////////////////////////////////////// -// In progress - static bool UncompressRLE16BitsFromRLE8Bits( - int XSize, - int YSize, - int NumberOfFrames, - uint8_t* fixMemUncompressed ); - static bool ReadAndUncompressRLEFragment( +private: + // Use the fp: + bool ReadAndDecompressRLEFragment( uint8_t* decodedZone, long fragmentSize, long uncompressedSegmentSize, FILE* fp ); - static bool ReadAndDecompressRLEFile( - void* image_buffer, - int XSize, - int YSize, - int ZSize, - int BitsAllocated, - RLEFramesInfo* RLEInfo, - FILE* fp ); - static void ConvertDecompress12BitsTo16Bits( - uint8_t* pixelZone, - int sizeX, - int sizeY, - FILE* filePtr) throw ( FormatError ); - 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, - JPEGFragmentsInfo* JPEGInfo, - FILE* fp ); - static bool PixelConvert::ConvertReArrangeBits( - uint8_t* pixelZone, - size_t imageDataSize, - int numberBitsStored, - int numberBitsAllocated, - int highBitPosition ) throw ( FormatError ); + 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 + //----------------------------------------------------------------------------- #endif