X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmParse.cxx;h=7936e69aa310760a51000016c1b3fe597f6d5c01;hb=74917aa3a592bde592130de5ece8d9315015b373;hp=0682f2cb3b7e19e67064a79a161601c57c2e11a3;hpb=48d629b49cc690bcd26f6721f38af0ca876be417;p=gdcm.git diff --git a/src/gdcmParse.cxx b/src/gdcmParse.cxx index 0682f2cb..7936e69a 100644 --- a/src/gdcmParse.cxx +++ b/src/gdcmParse.cxx @@ -1,5 +1,5 @@ // gdcmParse.cxx - +//----------------------------------------------------------------------------- //This is needed when compiling in debug mode #ifdef _MSC_VER // 'type' : forcing value to bool 'true' or 'false' (performance warning) @@ -14,11 +14,10 @@ #include "gdcmFile.h" #include "gdcmUtil.h" -#include "iddcmjpeg.h" // for the 'LibIDO' Jpeg LossLess #define str2num(str, typeNum) *((typeNum *)(str)) -///////////////////////////////////////////////////////////////// +//----------------------------------------------------------------------------- /** * \ingroup gdcmFile * \brief Parse pixel data from disk and *prints* the result @@ -29,27 +28,30 @@ * */ bool gdcmFile::ParsePixelData(void) { +// DO NOT remove the printf s. +// The ONLY purpose of this method is to PRINT the content + FILE *fp; - if ( !OpenFile()) + if ( !(fp=Header->OpenFile())) return false; - if ( fseek(fp, GetPixelOffset(), SEEK_SET) == -1 ) { - CloseFile(); + if ( fseek(fp, Header->GetPixelOffset(), SEEK_SET) == -1 ) { + Header->CloseFile(); return false; } - if ( !IsDicomV3() || - IsImplicitVRLittleEndianTransferSyntax() || - IsExplicitVRLittleEndianTransferSyntax() || - IsExplicitVRBigEndianTransferSyntax() || - IsDeflatedExplicitVRLittleEndianTransferSyntax() ) { + if ( !Header->IsDicomV3() || + Header->IsImplicitVRLittleEndianTransferSyntax() || + Header->IsExplicitVRLittleEndianTransferSyntax() || + Header->IsExplicitVRBigEndianTransferSyntax() || + Header->IsDeflatedExplicitVRLittleEndianTransferSyntax() ) { printf ("gdcmFile::ParsePixelData : non JPEG/RLE File\n"); - return 0; + return false; } int nb; - std::string str_nb=gdcmHeader::GetPubElValByNumber(0x0028,0x0100); + std::string str_nb=Header->GetPubEntryByNumber(0x0028,0x0100); if (str_nb == GDCM_UNFOUND ) { nb = 16; } else { @@ -58,7 +60,7 @@ bool gdcmFile::ParsePixelData(void) { } int nBytes= nb/8; - int taille = GetXSize() * GetYSize() * GetSamplesPerPixel(); + int taille = Header->GetXSize() * Header->GetYSize() * Header->GetSamplesPerPixel(); printf ("Checking the Dicom-encapsulated Jpeg/RLE Pixels\n"); @@ -67,26 +69,24 @@ bool gdcmFile::ParsePixelData(void) { long ftellRes; char * destination = NULL; - // ------------------------------- for Parsing : Position on begining of Jpeg/RLE Pixels + // -------------------- for Parsing : Position on begining of Jpeg/RLE Pixels - if( !IsRLELossLessTransferSyntax()) { + if( !Header->IsRLELossLessTransferSyntax()) { // JPEG Image - - std::cout << "JPEG image" << std::endl; ftellRes=ftell(fp); - fread(&ItemTagGr,2,1,fp); // Reading (fffe) : Basic Offset Table Item Tag Gr - fread(&ItemTagEl,2,1,fp); // Reading (e000) : Basic Offset Table Item Tag El - if(GetSwapCode()) { - ItemTagGr=SwapShort(ItemTagGr); - ItemTagEl=SwapShort(ItemTagEl); + fread(&ItemTagGr,2,1,fp); //Reading (fffe):Basic Offset Table Item Tag Gr + fread(&ItemTagEl,2,1,fp); //Reading (e000):Basic Offset Table Item Tag El + if(Header->GetSwapCode()) { + ItemTagGr=Header->SwapShort(ItemTagGr); + ItemTagEl=Header->SwapShort(ItemTagEl); } printf ("at %x : ItemTag (should be fffe,e000): %04x,%04x\n", ftellRes,ItemTagGr,ItemTagEl ); ftellRes=ftell(fp); fread(&ln,4,1,fp); - if(GetSwapCode()) - ln=SwapLong(ln); // Basic Offset Table Item Lentgh + if(Header->GetSwapCode()) + ln=Header->SwapLong(ln); // Basic Offset Table Item Lentgh printf("at %x : Basic Offset Table Item Lentgh (??) %d x(%08x)\n", ftellRes,ln,ln); if (ln != 0) { @@ -103,19 +103,19 @@ bool gdcmFile::ParsePixelData(void) { ftellRes=ftell(fp); fread(&ItemTagGr,2,1,fp); // Reading (fffe) : Item Tag Gr fread(&ItemTagEl,2,1,fp); // Reading (e000) : Item Tag El - if(GetSwapCode()) { - ItemTagGr=SwapShort(ItemTagGr); - ItemTagEl=SwapShort(ItemTagEl); + if(Header->GetSwapCode()) { + ItemTagGr=Header->SwapShort(ItemTagGr); + ItemTagEl=Header->SwapShort(ItemTagEl); } printf ("at %x : ItemTag (should be fffe,e000 or e0dd): %04x,%04x\n", ftellRes,ItemTagGr,ItemTagEl ); - while ( ( ItemTagGr == 0xfffe) && (ItemTagEl != 0xe0dd) ) { // Parse fragments + while ( ( ItemTagGr==0xfffe) && (ItemTagEl!=0xe0dd) ) { // Parse fragments ftellRes=ftell(fp); fread(&ln,4,1,fp); - if(GetSwapCode()) - ln=SwapLong(ln); // length + if(Header->GetSwapCode()) + ln=Header->SwapLong(ln); // length printf(" at %x : fragment length %d x(%08x)\n", ftellRes, ln,ln); @@ -130,9 +130,9 @@ bool gdcmFile::ParsePixelData(void) { ftellRes=ftell(fp); fread(&ItemTagGr,2,1,fp); // Reading (fffe) : Item Tag Gr fread(&ItemTagEl,2,1,fp); // Reading (e000) : Item Tag El - if(GetSwapCode()) { - ItemTagGr=SwapShort(ItemTagGr); - ItemTagEl=SwapShort(ItemTagEl); + if(Header->GetSwapCode()) { + ItemTagGr=Header->SwapShort(ItemTagGr); + ItemTagEl=Header->SwapShort(ItemTagEl); } printf ("at %x : ItemTag (should be fffe,e000 or e0dd): %04x,%04x\n", ftellRes,ItemTagGr,ItemTagEl ); @@ -141,27 +141,25 @@ bool gdcmFile::ParsePixelData(void) { } else { // RLE Image - - std::cout << "RLE image" << std::endl; long RleSegmentLength[15],fragmentLength; guint32 nbRleSegments; guint32 RleSegmentOffsetTable[15]; ftellRes=ftell(fp); // Basic Offset Table with Item Value // Item Tag - fread(&ItemTagGr,2,1,fp); // Reading (fffe):Basic Offset Table Item Tag Gr - fread(&ItemTagEl,2,1,fp); // Reading (e000):Basic Offset Table Item Tag El - if(GetSwapCode()) { - ItemTagGr=SwapShort(ItemTagGr); - ItemTagEl=SwapShort(ItemTagEl); + fread(&ItemTagGr,2,1,fp); //Reading (fffe):Basic Offset Table Item Tag Gr + fread(&ItemTagEl,2,1,fp); //Reading (e000):Basic Offset Table Item Tag El + if(Header->GetSwapCode()) { + ItemTagGr=Header->SwapShort(ItemTagGr); + ItemTagEl=Header->SwapShort(ItemTagEl); } printf ("at %x : ItemTag (should be fffe,e000): %04x,%04x\n", ftellRes,ItemTagGr,ItemTagEl ); // Item Length ftellRes=ftell(fp); fread(&ln,4,1,fp); - if(GetSwapCode()) - ln=SwapLong(ln); // Basic Offset Table Item Lentgh + if(Header->GetSwapCode()) + ln=Header->SwapLong(ln); // Basic Offset Table Item Lentgh printf("at %x : Basic Offset Table Item Lentgh (??) %d x(%08x)\n", ftellRes,ln,ln); if (ln != 0) { @@ -178,9 +176,9 @@ bool gdcmFile::ParsePixelData(void) { ftellRes=ftell(fp); fread(&ItemTagGr,2,1,fp); // Reading (fffe) : Item Tag Gr fread(&ItemTagEl,2,1,fp); // Reading (e000) : Item Tag El - if(GetSwapCode()) { - ItemTagGr=SwapShort(ItemTagGr); - ItemTagEl=SwapShort(ItemTagEl); + if(Header->GetSwapCode()) { + ItemTagGr=Header->SwapShort(ItemTagGr); + ItemTagEl=Header->SwapShort(ItemTagEl); } printf ("at %x : ItemTag (should be fffe,e000 or e0dd): %04x,%04x\n", ftellRes,ItemTagGr,ItemTagEl ); @@ -190,40 +188,42 @@ bool gdcmFile::ParsePixelData(void) { // Parse fragments of the current Fragment (Frame) ftellRes=ftell(fp); fread(&fragmentLength,4,1,fp); - if(GetSwapCode()) - fragmentLength=SwapLong(fragmentLength); // length + if(Header->GetSwapCode()) + fragmentLength=Header->SwapLong(fragmentLength); // length printf(" at %x : 'fragment' length %d x(%08x)\n", ftellRes, fragmentLength,fragmentLength); //------------------ scanning (not reading) fragment pixels - fread(&nbRleSegments,4,1,fp); // Reading : Number of RLE Segments - if(GetSwapCode()) - nbRleSegments=SwapLong(nbRleSegments); - printf(" Nb of RLE Segments : %d\n",nbRleSegments); + fread(&nbRleSegments,4,1,fp); // Reading : Number of RLE Segments + if(Header->GetSwapCode()) + nbRleSegments=Header->SwapLong(nbRleSegments); + printf(" Nb of RLE Segments : %d\n",nbRleSegments); for(int k=1; k<=15; k++) { // Reading RLE Segments Offset Table ftellRes=ftell(fp); fread(&RleSegmentOffsetTable[k],4,1,fp); - if(GetSwapCode()) - RleSegmentOffsetTable[k]=SwapLong(RleSegmentOffsetTable[k]); + if(Header->GetSwapCode()) + RleSegmentOffsetTable[k]=Header->SwapLong(RleSegmentOffsetTable[k]); printf(" at : %x Offset Segment %d : %d (%x)\n", - ftellRes,k,RleSegmentOffsetTable[k],RleSegmentOffsetTable[k]); + ftellRes,k,RleSegmentOffsetTable[k], + RleSegmentOffsetTable[k]); } - if (nbRleSegments>1) { - for(int k=1; k<=nbRleSegments-1; k++) { // skipping (not reading) RLE Segments - RleSegmentLength[k]=RleSegmentOffsetTable[k+1]-RleSegmentOffsetTable[k]; + if (nbRleSegments>1) { // skipping (not reading) RLE Segments + for(int k=1; k<=nbRleSegments-1; k++) { + RleSegmentLength[k]= RleSegmentOffsetTable[k+1] + - RleSegmentOffsetTable[k]; ftellRes=ftell(fp); - printf (" Segment %d : Length = %d x(%x) Start at %x\n", - k,RleSegmentLength[k],RleSegmentLength[k], ftellRes); + printf (" Segment %d : Length = %d x(%x) Start at %x\n", + k,RleSegmentLength[k],RleSegmentLength[k], ftellRes); fseek(fp,RleSegmentLength[k],SEEK_CUR); } } - RleSegmentLength[nbRleSegments] = fragmentLength - RleSegmentOffsetTable[nbRleSegments] ; - // TODO : Check the value + RleSegmentLength[nbRleSegments]= fragmentLength + - RleSegmentOffsetTable[nbRleSegments]; ftellRes=ftell(fp); - printf (" Segment %d : Length = %d x(%x) Start at %x\n", + printf (" Segment %d : Length = %d x(%x) Start at %x\n", nbRleSegments,RleSegmentLength[nbRleSegments], RleSegmentLength[nbRleSegments],ftellRes); @@ -234,13 +234,15 @@ bool gdcmFile::ParsePixelData(void) { ftellRes=ftell(fp); fread(&ItemTagGr,2,1,fp); // Reading (fffe) : Item Tag Gr fread(&ItemTagEl,2,1,fp); // Reading (e000) : Item Tag El - if(GetSwapCode()) { - ItemTagGr=SwapShort(ItemTagGr); - ItemTagEl=SwapShort(ItemTagEl); + if(Header->GetSwapCode()) { + ItemTagGr=Header->SwapShort(ItemTagGr); + ItemTagEl=Header->SwapShort(ItemTagEl); } printf ("at %x : ItemTag (should be fffe,e000 or e0dd): %04x,%04x\n", ftellRes,ItemTagGr,ItemTagEl ); } } - return 1; + return true; } + +//-----------------------------------------------------------------------------