]> Creatis software - gdcm.git/commitdiff
Adding some warning messages
authorjpr <jpr>
Thu, 9 Sep 2004 17:55:40 +0000 (17:55 +0000)
committerjpr <jpr>
Thu, 9 Sep 2004 17:55:40 +0000 (17:55 +0000)
Example/CMakeLists.txt
Example/PrintFile.cxx
Example/PrintHeader.cxx
Example/TestReadWriteReadCompare.cxx [new file with mode: 0644]

index b6ac6f45cc5b8485cb0a2aedee0dbadda248cb5d..791748f3272b38b8f651720cc126026b7effa446 100644 (file)
@@ -52,3 +52,6 @@ TARGET_LINK_LIBRARIES(TestCopyDicom  gdcm)
 
 ADD_EXECUTABLE(TestChangeHeader TestChangeHeader.cxx)
 TARGET_LINK_LIBRARIES(TestChangeHeader  gdcm)
+
+ADD_EXECUTABLE(TestReadWriteReadCompare TestReadWriteReadCompare.cxx)
+TARGET_LINK_LIBRARIES(TestReadWriteReadCompare  gdcm)
index ad890128ab1b86909b3487b072a98ad865fbab8b..0e780d213abf6fde248bdffcdc195cdfd94bbf1f 100644 (file)
@@ -52,6 +52,14 @@ int main(int argc, char* argv[])
    int numberOfScalarComponents=e1->GetNumberOfScalarComponents();
    std::cout << " NumberOfScalarComponents " << numberOfScalarComponents <<std::endl;
 
+  
+  if ( e1->GetEntryByNumber(0x0002,0x0010) == GDCM_NOTLOADED ) {
+     std::cout << "Transfert Syntax not loaded. " << std::endl
+               << "Better you increase MAX_SIZE_LOAD_ELEMENT_VALUE"
+               << std::endl;
+      return 0;
+  }
+  
    std::string transferSyntaxName = e1->GetTransfertSyntaxName();
    std::cout << " TransferSyntaxName= [" << transferSyntaxName << "]" << std::endl;
    
index 4b12529f23f36cccd6b72f23bcf53ffb85b99730..1c3fb8cdb8648d7226d07ba8de1247612eb03315 100644 (file)
@@ -30,7 +30,15 @@ int main(int argc, char* argv[])
 
   e1->Print();   
       
-  std::cout << "\n\n" << std::endl;      
+  std::cout << "\n\n" << std::endl; 
+  
+  if ( e1->GetEntryByNumber(0x0002,0x0010) == GDCM_NOTLOADED ) {
+     std::cout << "Transfert Syntax not loaded. " << std::endl
+               << "Better you increase MAX_SIZE_LOAD_ELEMENT_VALUE"
+               << std::endl;
+     return 0;
+  }
+      
   std::string transferSyntaxName = e1->GetTransfertSyntaxName();
   std::cout << " TransferSyntaxName= [" << transferSyntaxName << "]" << std::endl;
    
@@ -38,7 +46,7 @@ int main(int argc, char* argv[])
       && transferSyntaxName != "Explicit VR - Little Endian"     
       && transferSyntaxName != "Deflated Explicit VR - Little Endian"      
       && transferSyntaxName != "Explicit VR - Big Endian"
-      && transferSyntaxName != "Uncompressed ACR-NEMA"     )
+      && transferSyntaxName != "Uncompressed ACR-NEMA" )
   {
   std::cout << std::endl << "==========================================="
                   << std::endl; 
diff --git a/Example/TestReadWriteReadCompare.cxx b/Example/TestReadWriteReadCompare.cxx
new file mode 100644 (file)
index 0000000..5ea15b8
--- /dev/null
@@ -0,0 +1,137 @@
+#include "gdcmHeader.h"
+#include "gdcmFile.h"
+
+//Generated file:
+#include "gdcmDataImages.h"
+
+int main(int argc, char* argv[]) 
+{
+   if (argc)
+   {
+      std::cerr << "Test::TestReadWriteReadCompare: Usage: " << argv[0]
+                << " (no arguments needed)." << std::endl;
+   }
+   
+   std::cout<< "Test::TestReadWriteReadCompare: description " << std::endl;
+   std::cout << "   For all images in gdcmData (and not blacklisted in "
+                "Test/CMakeLists.txt)" << std::endl;
+   std::cout << "   apply the following multistep test: " << std::endl;
+   std::cout << "   step 1: parse the image (as gdcmHeader) and call"
+             << " IsReadable(). " << std::endl;
+   std::cout << "   step 2: write the corresponding image in DICOM V3 "
+             << "with explicit" << std::endl
+             << "           Value Representation in temporary file "
+             << "TestReadWriteReadCompare.dcm." << std::endl;
+   std::cout << "   step 3: read the image written on step2 and call "
+             << " IsReadable(). " << std::endl;
+   std::cout << "   step 4: compare (in memory with memcmp) that the two "
+             << "images " << std::endl
+             << "           match (as expanded by gdcm)." << std::endl;
+
+   int i = 0;
+   while( gdcmDataImages[i] != 0 )
+   {
+      std::string filename = GDCM_DATA_ROOT;
+      filename += "/";
+      filename += gdcmDataImages[i++];
+   
+      std::cout << "   Testing: " << filename << std::endl;
+
+      //////////////// Step 1 (see above description):
+
+      gdcmHeader *header = new gdcmHeader( filename );
+      if( !header->IsReadable() )
+      {
+         std::cerr << "Test::TestReadWriteReadCompare: Image not gdcm compatible:"
+                   << filename << std::endl;
+         delete header;
+         return 1;
+      }
+      std::cout << "           step 1 ...";
+
+      //////////////// Step 2:
+
+      gdcmFile*  file = new gdcmFile( header );
+      int dataSize    = file->GetImageDataSize();
+      void* imageData = file->GetImageData(); //EXTREMELY IMPORTANT
+             // Sure, it is : It's up to the user to decide if he wants to
+             // GetImageData or if he wants to GetImageDataRaw
+             // (even if we do it by setting a flag, he will have to decide) 
+
+      /// \todo Following line commented out because gdcmFile::SetImageData() is
+      /// brain dead: it sets ImageDataSize to its argument and PixelRead to a.
+      /// Later on, when writing gdcmFile::WriteBase() 
+      /// and because PixelRead == 1 we call
+      ///    PixelElement->SetLength( ImageDataSizeRaw );
+      /// where we use ImageDataSizeRAW instead of ImageDataSize !
+      /// But when the original image made the transformation LUT -> RGB, 
+      /// ImageDataSizeRaw is the third of ImageDataSize, and there is no
+      /// reason (since we called gdcmFile::SetImageData) to use the Raw image
+      /// size... This "bug" in gdcmFile made that we had to black list
+      /// images 8BitsUncompressedColor.dcm, OT-PAL-8-face.dcm and 
+      /// US-PAL-8-10x-echo.dcm...
+      /// In conclusion fix gdcmFile, and then uncomment the following line.
+      
+      // --> I did. ctest doesn't break. But ... is it enought to say it's OK ?
+      
+      file->SetImageData(imageData, dataSize);
+      
+      file->WriteDcmExplVR( "TestReadWriteReadCompare.dcm" );
+      std::cout << "2...";
+    
+      //////////////// Step 3:
+
+      gdcmFile* reread = new gdcmFile( "TestReadWriteReadCompare.dcm" );
+      if( !reread->GetHeader()->IsReadable() )
+      {
+        std::cerr << "Test::TestReadWriteReadCompare: Could not reread image "
+                  << "written:" << filename << std::endl;
+        delete header;
+        delete file;
+        delete reread;
+        return 1;
+      }
+      std::cout << "3...";
+      // For the next step:
+      int    dataSizeWritten = reread->GetImageDataSize();
+      void* imageDataWritten = reread->GetImageData();
+
+      //////////////// Step 4:
+      if (dataSize != dataSizeWritten)
+      {
+         std::cout << std::endl
+            << "        Pixel areas lengths differ: "
+            << dataSize << " # " << dataSizeWritten << std::endl;
+         delete (char*)imageData;
+         delete (char*)imageDataWritten;
+         delete header;
+         delete file;
+         delete reread;
+         return 1;
+      }
+
+      if (int res = memcmp(imageData, imageDataWritten, dataSize) !=0)
+      {
+         (void)res;
+         std::cout << std::endl
+            << "        Pixel differ (as expanded in memory)." << std::endl;
+         delete (char*)imageData;
+         delete (char*)imageDataWritten;
+         delete header;
+         delete file;
+         delete reread;
+         return 1;
+      }
+      std::cout << "4...OK." << std::endl ;
+
+      //////////////// Clean up:
+      delete (char*)imageData;
+      delete (char*)imageDataWritten;
+      delete header;
+      delete file;
+      delete reread;
+   }
+
+  return 0;
+}