Program: gdcm
Module: $RCSfile: gdcmPixelConvert.h,v $
Language: C++
- Date: $Date: 2004/10/12 09:59:45 $
- Version: $Revision: 1.7 $
+ 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
#include "gdcmRLEFramesInfo.h"
#include "gdcmJPEGFragmentsInfo.h"
#include "gdcmException.h"
+#include "gdcmHeader.h"
namespace gdcm
{
* migth take during the user demanded processes.
*/
class GDCM_EXPORT PixelConvert {
-friend class File;
- /// Pixel data represented as RGB after color interpretation
+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( 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_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;
int PixelSize;
bool PixelSign;
int SwapCode;
- bool IsUncompressed;
+
+ bool IsDecompressed;
bool IsJPEG2000;
bool IsJPEGLossless;
bool IsRLELossless;
+
RLEFramesInfo* RLEInfo;
JPEGFragmentsInfo* JPEGInfo;
-
-private:
- bool ReadAndUncompressRLEFragment(
- uint8_t* decodedZone,
- long fragmentSize,
- long uncompressedSegmentSize,
- FILE* fp );
-public:
- PixelConvert();
- ~PixelConvert();
- 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; }
+ // 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;
- uint8_t* GetRGB() { return RGB; }
- void SetRGBSize( size_t size ) { RGBSize = size; }
- size_t GetRGBSize() { return RGBSize; }
- void AllocateRGB();
-
- uint8_t* GetDecompressed() { return Decompressed; }
- void SetDecompressedSize( size_t size ) { DecompressedSize = size; }
- size_t GetDecompressedSize() { return DecompressedSize; }
- void AllocateDecompressed();
-
-//////////////////////////////////////////////////////////
-// In progress
-private:
- bool UncompressRLE16BitsFromRLE8Bits(
- int NumberOfFrames,
- uint8_t* fixMemUncompressed );
- void ComputeDecompressedImageDataSize();
- void Decompress12BitsTo16Bits(
- uint8_t* pixelZone,
- FILE* filePtr) throw ( FormatError );
- bool ReadAndDecompressRLEFile( void* image_buffer, FILE* fp );
- bool ReadAndDecompressJPEGFile( uint8_t* destination, FILE* fp );
- void SwapZone( uint8_t* im );
-public:
- void ReorderEndianity( uint8_t* pixelZone );
- bool ReArrangeBits( uint8_t* pixelZone ) throw ( FormatError );
- void ConvertRGBPlanesToRGBPixels(
- uint8_t* destination,
- size_t imageDataSize );
- void ConvertYcBcRPlanesToRGBPixels(
- uint8_t* destination,
- size_t imageDataSize );
- bool ReadAndDecompressPixelData( void* destination, FILE* fp );
- void Squeeze();
};
} // end namespace gdcm