- * \brief Implementation of the RLE decoding algorithm for decompressing
- * a RLE fragment. [refer to PS 3.5-2003, section G.3.2 p 86]
- * @param subRaw Sub region of \ref Raw where the decoded fragment
- * should be placed.
- * @param fragmentSize The length of the binary fragment as found on the disk.
- * @param RawSegmentSize The expected length of the fragment ONCE
- * Raw.
- * @param fp File Pointer: on entry the position should be the one of
- * the fragment to be decoded.
- */
-bool RLEFramesInfo::ReadAndDecompressRLEFragment( uint8_t *subRaw,
- long fragmentSize,
- long RawSegmentSize,
- std::ifstream *fp )
-{
- int8_t count;
- long numberOfOutputBytes = 0;
- long numberOfReadBytes = 0;
-
- while( numberOfOutputBytes < RawSegmentSize )
- {
- fp->read( (char*)&count, 1 );
- numberOfReadBytes += 1;
- if ( count >= 0 )
- // Note: count <= 127 comparison is always true due to limited range
- // of data type int8_t [since the maximum of an exact width
- // signed integer of width N is 2^(N-1) - 1, which for int8_t
- // is 127].
- {
- fp->read( (char*)subRaw, count + 1);
- numberOfReadBytes += count + 1;
- subRaw += count + 1;
- numberOfOutputBytes += count + 1;
- }
- else
- {
- if ( count <= -1 && count >= -127 )
- {
- int8_t newByte;
- fp->read( (char*)&newByte, 1);
- numberOfReadBytes += 1;
- for( int i = 0; i < -count + 1; i++ )
- {
- subRaw[i] = newByte;
- }
- subRaw += -count + 1;
- numberOfOutputBytes += -count + 1;
- }
- }
- // if count = 128 output nothing
-
- if ( numberOfReadBytes > fragmentSize )
- {
- gdcmVerboseMacro( "Read more bytes than the segment size.");
- return false;
- }
- }
- return true;
-}
-
-/**
- * \brief Try to deal with RLE 16 Bits.
- * We assume the RLE has already been parsed and loaded in
- * Raw (through \ref ReadAndDecompressJPEGFile ).
- * We here need to make 16 Bits Pixels from Low Byte and
- * High Byte 'Planes'...(for what it may mean)
- * @return Boolean