- FILE* fp = HeaderInternal->OpenFile();
-
- if ( !fp )
- {
- return false;
- }
- if ( fseek(fp, HeaderInternal->GetPixelOffset(), SEEK_SET) == -1 )
- {
- HeaderInternal->CloseFile();
- return false;
- }
-
- if ( HeaderInternal->GetBitsAllocated() == 12 )
- {
- PixelConvert::ConvertDecompress12BitsTo16Bits(
- (uint8_t*)destination,
- HeaderInternal->GetXSize(),
- HeaderInternal->GetYSize(),
- fp);
- HeaderInternal->CloseFile();
- return true;
- }
-
- // ---------------------- Uncompressed File
- if ( !HeaderInternal->IsDicomV3() ||
- HeaderInternal->IsImplicitVRLittleEndianTransferSyntax() ||
- HeaderInternal->IsExplicitVRLittleEndianTransferSyntax() ||
- HeaderInternal->IsExplicitVRBigEndianTransferSyntax() ||
- HeaderInternal->IsDeflatedExplicitVRLittleEndianTransferSyntax() )
- {
- size_t ItemRead = fread(destination, HeaderInternal->GetPixelAreaLength(), 1, fp);
- HeaderInternal->CloseFile();
- if ( ItemRead != 1 )
- {
- return false;
- }
- else
- {
- return true;
- }
- }
-
- // ---------------------- Run Length Encoding
- if ( HeaderInternal->IsRLELossLessTransferSyntax() )
- {
- bool res = PixelConvert::ReadAndDecompressRLEFile(
- destination,
- HeaderInternal->GetXSize(),
- HeaderInternal->GetYSize(),
- HeaderInternal->GetZSize(),
- HeaderInternal->GetBitsAllocated(),
- &(HeaderInternal->RLEInfo),
- fp );
- HeaderInternal->CloseFile();
- return res;
- }
-
- // --------------- SingleFrame/Multiframe JPEG Lossless/Lossy/2000
- int numberBitsAllocated = HeaderInternal->GetBitsAllocated();
- if ( ( numberBitsAllocated == 0 ) || ( numberBitsAllocated == 12 ) )
- {
- numberBitsAllocated = 16;
- }
-
- bool res = PixelConvert::ReadAndDecompressJPEGFile(
- (uint8_t*)destination,
- HeaderInternal->GetXSize(),
- HeaderInternal->GetYSize(),
- HeaderInternal->GetBitsAllocated(),
- HeaderInternal->GetBitsStored(),
- HeaderInternal->GetSamplesPerPixel(),
- HeaderInternal->GetPixelSize(),
- HeaderInternal->IsJPEG2000(),
- HeaderInternal->IsJPEGLossless(),
- &(HeaderInternal->JPEGInfo),
- fp );
- HeaderInternal->CloseFile();
- return res;