]> Creatis software - gdcm.git/blobdiff - src/gdcmParse.cxx
* To remove warnings
[gdcm.git] / src / gdcmParse.cxx
index 0682f2cb3b7e19e67064a79a161601c57c2e11a3..b79efb72e69f6aa49950e31612b447f1d3d16b09 100644 (file)
@@ -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)
 
 #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
  *
  */
 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->GetPubElValByNumber(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;            
 }
+
+//-----------------------------------------------------------------------------