]> Creatis software - gdcm.git/commitdiff
* src/gdcmFile.[h|cxx] : bug fix for ACR-LIBIDO files when writting the file
authorregrain <regrain>
Tue, 30 Nov 2004 14:17:51 +0000 (14:17 +0000)
committerregrain <regrain>
Tue, 30 Nov 2004 14:17:51 +0000 (14:17 +0000)
   * Test/TestAllReadCompareDicom.cxx, TestReadWriteReadCompare.cxx : add
     tests on the image size X, Y, Z
   -- BeNours

ChangeLog
Testing/TestAllReadCompareDicom.cxx
Testing/TestReadWriteReadCompare.cxx
src/gdcmFile.cxx
src/gdcmFile.h

index aff435cc9774fa48a412ae95a9871e9e868ffbd3..5b20d42a66f3d81b91faf7ad5512555732b3ecc0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2004-11-30 Benoit Regrain <Benoit.Regrain@creatis.insa-lyon.fr>
+   * src/gdcmFile.[h|cxx] : bug fix for ACR-LIBIDO files when writting the file
+   * Test/TestAllReadCompareDicom.cxx, TestReadWriteReadCompare.cxx : add
+     tests on the image size X, Y, Z
+
 2004-11-26 Benoit Regrain <Benoit.Regrain@creatis.insa-lyon.fr>
    * Remove some useless methods in gdcm::Document, gdcm::Header and gdcm::File
    * Rename gdcmHeaderHelper.[h|cxx] to gdcmSerieHeader.[h|cxx] to be coherent
index 4a461f2cda64f008110a78a8ceb278bfd151e4f9..e341b6451745594fb3638ab8c0fb2fe760b70a92 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: TestAllReadCompareDicom.cxx,v $
   Language:  C++
-  Date:      $Date: 2004/11/25 10:24:33 $
-  Version:   $Revision: 1.19 $
+  Date:      $Date: 2004/11/30 14:17:52 $
+  Version:   $Revision: 1.20 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -81,6 +81,25 @@ int InternalTest(std::string const & filename,
       int    referenceDataSize = reference->GetImageDataSize();
       uint8_t* referenceImageData = reference->GetImageData();
 
+      // Test the image size
+      if (tested->GetHeader()->GetXSize() != reference->GetHeader()->GetXSize() ||
+          tested->GetHeader()->GetYSize() != reference->GetHeader()->GetYSize() ||
+          tested->GetHeader()->GetZSize() != reference->GetHeader()->GetZSize())
+      {
+         std::cout << "Failed" << std::endl
+            << "        Size differs: "
+            << "X: " << tested->GetHeader()->GetXSize() << " # " 
+                     << reference->GetHeader()->GetXSize() << " | "
+            << "Y: " << tested->GetHeader()->GetYSize() << " # " 
+                     << reference->GetHeader()->GetYSize() << " | "
+            << "Z: " << tested->GetHeader()->GetZSize() << " # " 
+                     << reference->GetHeader()->GetZSize() << std::endl;
+         delete reference;
+         delete tested;
+         return 1;
+      }
+
+      // Test the data size
       if (testedDataSize != referenceDataSize)
       {
          std::cout << " Failed" << std::endl
@@ -92,6 +111,7 @@ int InternalTest(std::string const & filename,
          return 1;
       }
 
+      // Test the data content
       if (int res = memcmp(testedImageData, referenceImageData,
                            testedDataSize) != 0 )
       {
index b5359ba8990b8b00f27ae8afcff8bd76687ac4c7..cc48edb7bd94bdf1bf46d7df9c7218e8d0c7b859 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: TestReadWriteReadCompare.cxx,v $
   Language:  C++
-  Date:      $Date: 2004/11/25 10:24:34 $
-  Version:   $Revision: 1.16 $
+  Date:      $Date: 2004/11/30 14:17:52 $
+  Version:   $Revision: 1.17 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -87,7 +87,26 @@ int CompareInternal(std::string const & filename, std::string const & output)
    uint8_t* imageDataWritten = reread->GetImageData();
 
    //////////////// Step 4:
+   // Test the image size
+   if (header->GetXSize() != reread->GetHeader()->GetXSize() ||
+       header->GetYSize() != reread->GetHeader()->GetYSize() ||
+       header->GetZSize() != reread->GetHeader()->GetZSize())
+   {
+      std::cout << "Failed" << std::endl
+         << "        X Size differs: "
+         << "X: " << header->GetXSize() << " # " 
+                  << reread->GetHeader()->GetXSize() << " | "
+         << "Y: " << header->GetYSize() << " # " 
+                  << reread->GetHeader()->GetYSize() << " | "
+         << "Z: " << header->GetZSize() << " # " 
+                  << reread->GetHeader()->GetZSize() << std::endl;
+      delete header;
+      delete file;
+      delete reread;
+      return 1;
+   }
 
+   // Test the data size
    if (dataSize != dataSizeWritten)
    {
       std::cout << "Failed" << std::endl
@@ -99,6 +118,7 @@ int CompareInternal(std::string const & filename, std::string const & output)
       return 1;
    }
 
+   // Test the data's content
    if (int res = memcmp(imageData, imageDataWritten, dataSize) !=0)
    {
       (void)res;
index ca361e54cf377fe0fc2f589b3566581d6e9b2b90..035e25c3d5935b736cd172d9be5fe46558427c41 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmFile.cxx,v $
   Language:  C++
-  Date:      $Date: 2004/11/26 10:55:04 $
-  Version:   $Revision: 1.166 $
+  Date:      $Date: 2004/11/30 14:17:52 $
+  Version:   $Revision: 1.167 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -406,14 +406,21 @@ bool File::WriteBase (std::string const & fileName, FileType type)
          SetWriteFileTypeToExplicitVR();
          break;
       case ACR:
-         SetWriteFileTypeToACR();
-         break;
       case ACR_LIBIDO:
-         SetWriteFileTypeToACRLibido();
+         SetWriteFileTypeToACR();
          break;
       default:
          SetWriteFileTypeToExplicitVR();
    }
+
+   if( type == ACR_LIBIDO )
+   {
+      SetWriteToLibido();
+   }
+   else
+   {
+      SetWriteToNoLibido();
+   }
   
    switch(WriteMode)
    {
@@ -461,6 +468,7 @@ bool File::WriteBase (std::string const & fileName, FileType type)
 
    RestoreWrite();
    RestoreWriteFileType();
+   RestoreWriteOfLibido();
 
    return check;
 }
@@ -672,11 +680,6 @@ void File::SetWriteFileTypeToACR()
    Archive->Push(0x0002,0x0010);
 }
 
-void File::SetWriteFileTypeToACRLibido()
-{
-   SetWriteFileTypeToACR();
-}
-
 void File::SetWriteFileTypeToExplicitVR()
 {
    std::string ts = Util::DicomString( 
@@ -725,12 +728,33 @@ void File::SetWriteToLibido()
       Archive->Push(newRow);
       Archive->Push(newCol);
    }
+
+   ValEntry *libidoCode = CopyValEntry(0x0008,0x0010);
+   libidoCode->SetValue("ACRNEMA_LIBIDO_1.1");
+   libidoCode->SetLength(10);
+   Archive->Push(libidoCode);
+}
+
+void File::SetWriteToNoLibido()
+{
+   ValEntry *recCode = dynamic_cast<ValEntry *>(HeaderInternal->GetDocEntryByNumber(0x0008,0x0010));
+   if( recCode )
+   {
+      if( recCode->GetValue() == "ACRNEMA_LIBIDO_1.1" )
+      {
+         ValEntry *libidoCode = CopyValEntry(0x0008,0x0010);
+         libidoCode->SetValue("");
+         libidoCode->SetLength(0);
+         Archive->Push(libidoCode);
+      }
+   }
 }
 
-void File::RestoreWriteFromLibido()
+void File::RestoreWriteOfLibido()
 {
    Archive->Restore(0x0028,0x0010);
    Archive->Restore(0x0028,0x0011);
+   Archive->Restore(0x0008,0x0010);
 }
 
 ValEntry* File::CopyValEntry(uint16_t group,uint16_t element)
index 7637b7bd8d489cc2bf98f3765737c67c5bccc5a2..53062b89b8745ed1e0edbb24fa75d2b4feb2a7fd 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmFile.h,v $
   Language:  C++
-  Date:      $Date: 2004/11/26 10:55:04 $
-  Version:   $Revision: 1.78 $
+  Date:      $Date: 2004/11/30 14:17:52 $
+  Version:   $Revision: 1.79 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -111,13 +111,13 @@ protected:
    void RestoreWrite();
 
    void SetWriteFileTypeToACR();
-   void SetWriteFileTypeToACRLibido();
    void SetWriteFileTypeToExplicitVR();
    void SetWriteFileTypeToImplicitVR();
    void RestoreWriteFileType();
 
    void SetWriteToLibido();
-   void RestoreWriteFromLibido();
+   void SetWriteToNoLibido();
+   void RestoreWriteOfLibido();
 
    ValEntry* CopyValEntry(uint16_t group,uint16_t element);
    BinEntry* CopyBinEntry(uint16_t group,uint16_t element);