X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmPixelConvert.h;h=74a01d1e0a3625e8dc4fd315d546bfd3c0aa1a37;hb=5bf7c51796867388334836847a6874640bc83f89;hp=f567a3045c5cd9abfe304f1118fe9d3eabd26245;hpb=689f929ff0f35aabd30d81ffa75eb66fdf1a3c16;p=gdcm.git diff --git a/src/gdcmPixelConvert.h b/src/gdcmPixelConvert.h index f567a304..74a01d1e 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/09/29 17:33:17 $ - Version: $Revision: 1.1 $ + Date: $Date: 2004/10/20 14:30:40 $ + Version: $Revision: 1.11 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -21,51 +21,117 @@ #define GDCMPIXELCONVERTL_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 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 -bool ReadAndUncompress12Bits( FILE* filePointer, - size_t uncompressedSize, - size_t PixelNumber ); -bool ReadUncompressed( FILE* filePointer, - size_t uncompressedSize, - size_t expectedSize ); -bool ConvertGrayAndLutToRGB( uint8_t *lutRGBA ); -bool ReadAndUncompressRLE8Bits(FILE* fp, size_t uncompressedSize ); -bool UncompressRLE16BitsFromRLE8Bits( size_t PixelNumber, int NumberOfFrames ); + void GrabInformationsFromHeader( Header* header ); + bool ReadAndDecompressPixelData( FILE* fp ); + void Squeeze(); + bool BuildRGBImage( FILE* fp ); + +private: + // Use the fp: + bool ReadAndDecompressRLEFragment( + uint8_t* subDecompressed, + long fragmentSize, + long decompressedSegmentSize, + FILE* fp ); + void ReadAndDecompress12BitsTo16Bits( FILE* fp ) throw ( FormatError ); + bool ReadAndDecompressRLEFile( FILE* fp ); + bool ReadAndDecompressJPEGFile( FILE* fp ); + void BuildLUTRGBA( 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 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