]> Creatis software - gdcm.git/commitdiff
* src/gdcmFileHelper.cxx : remove memory leaks and bugs when writing files
authorregrain <regrain>
Wed, 9 Mar 2005 09:45:32 +0000 (09:45 +0000)
committerregrain <regrain>
Wed, 9 Mar 2005 09:45:32 +0000 (09:45 +0000)
   -- BeNours

ChangeLog
Testing/TestWriteSimple.cxx
src/gdcmFileHelper.cxx
src/gdcmFileHelper.h

index b883f2f3c8365334c340be331847a5c8386d66c1..18f873c77af61dc0a2619ac8a4881503f1cab7a6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,6 @@
+2005-03-07 Benoit Regrain <Benoit.Regrain@creatis.insa-lyon.fr>
+   * src/gdcmFileHelper.cxx : remove memory leaks and bugs when writing files
+
 2005-02-22 Benoit Regrain <Benoit.Regrain@creatis.insa-lyon.fr>
    * src/gdcmFileHelper.cxx : JPR bad personal choices fix
 
index 2c28aea8b0b35bc646472011fb9f5caff34d4fcb..f16d153fd532aadacb38b62ae2d39b41a476eb3e 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: TestWriteSimple.cxx,v $
   Language:  C++
-  Date:      $Date: 2005/03/03 11:03:41 $
-  Version:   $Revision: 1.27 $
+  Date:      $Date: 2005/03/09 09:45:33 $
+  Version:   $Revision: 1.28 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -269,6 +269,21 @@ int WriteSimple(Image &img)
    size_t dataSizeWritten = reread->GetImageDataSize();
    uint8_t *imageDataWritten = reread->GetImageData();
 
+   // Test the image write mode
+   if (reread->GetFile()->GetFileType() != file->GetWriteType())
+   {
+      std::cout << "Failed" << std::endl
+         << "        File type differ: "
+         << file->GetWriteType() << " # " 
+         << reread->GetFile()->GetFileType() << std::endl;
+      delete fileToBuild;
+      delete file;
+      delete reread;
+      delete[] imageData;
+
+      return 1;
+   }
+
    // Test the image size
    if (fileToBuild->GetXSize() != reread->GetFile()->GetXSize() ||
        fileToBuild->GetYSize() != reread->GetFile()->GetYSize() ||
@@ -337,13 +352,13 @@ int TestWriteSimple(int argc, char *argv[])
       return 1;
    }
 
-  // gdcm::Debug::DebugOn();
+   //gdcm::Debug::DebugOn();
        
    int ret=0;
    int i=0;
    while( Images[i].sizeX>0 && Images[i].sizeY>0 )
    {
-      std::cout << std::endl << "Test n :" << i << std::endl;
+      std::cout << "Test n :" << i; 
       ret += WriteSimple(Images[i] );
       i++;
    }
index a5e916931dcaee548a9ab1118eb725e8c755fe65..6852fe48219254ddba59d6d48b64d0085ee98690 100644 (file)
@@ -4,8 +4,8 @@
   Module:    $RCSfile: gdcmFileHelper.cxx,v $
   Language:  C++
 
-  Date:      $Date: 2005/03/07 18:48:02 $
-  Version:   $Revision: 1.28 $
+  Date:      $Date: 2005/03/09 09:45:33 $
+  Version:   $Revision: 1.29 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -660,6 +660,7 @@ bool FileHelper::Write(std::string const &fileName)
 
    RestoreWrite();
    RestoreWriteFileType();
+   RestoreWriteMandatory();
 
    // --------------------------------------------------------------
    // Special Patch to allow gdcm to re-write ACR-LibIDO formated images
@@ -943,17 +944,6 @@ void FileHelper::SetWriteFileTypeToImplicitVR()
  */ 
 void FileHelper::RestoreWriteFileType()
 {
-   // group 0002 may be pushed out for ACR-NEMA writting purposes 
-   Archive->Restore(0x0002,0x0000);
-   Archive->Restore(0x0002,0x0001);
-   Archive->Restore(0x0002,0x0002);
-   Archive->Restore(0x0002,0x0003);
-   Archive->Restore(0x0002,0x0010);
-   Archive->Restore(0x0002,0x0012);
-   Archive->Restore(0x0002,0x0013);
-   Archive->Restore(0x0002,0x0016);
-   Archive->Restore(0x0002,0x0100);
-   Archive->Restore(0x0002,0x0102);
 }
 
 /**
@@ -1054,16 +1044,10 @@ BinEntry *FileHelper::CopyBinEntry(uint16_t group, uint16_t elem,
    DocEntry *oldE = FileInternal->GetDocEntry(group, elem);
    BinEntry *newE;
 
-   if( oldE )  // The pb stands for Pixels Element, 
-               // when File is created ex-nihilo
+   if( oldE ) 
       if( oldE->GetVR()!=vr )
-      {
-         gdcmWarningMacro( " Unconsistent VR for Bin Entry : [" << oldE->GetVR() 
-                           << "] vs [" << vr << "] for " <<
-                           std::hex << group << "|" << elem);
-         FileInternal->RemoveEntry( oldE );
          oldE = NULL;
-      } 
+
    if( oldE )
    {
       newE = new BinEntry(oldE->GetDictEntry());
@@ -1121,7 +1105,6 @@ void FileHelper::CheckMandatoryElements()
    // Create them if not found
    // Always modify the value
    // Push the entries to the archive.
-
    ValEntry *e_0002_0000 = CopyValEntry(0x0002,0x0000);
       e_0002_0000->SetValue("0"); // for the moment
       Archive->Push(e_0002_0000);
@@ -1130,6 +1113,7 @@ void FileHelper::CheckMandatoryElements()
       e_0002_0001->SetBinArea((uint8_t*)Util::GetFileMetaInformationVersion(),
                                false);
       e_0002_0001->SetLength(2);
+      Archive->Push(e_0002_0001);
 
    ValEntry *e_0002_0002 = CopyValEntry(0x0002,0x0002);
       // [Secondary Capture Image Storage]
@@ -1141,11 +1125,6 @@ void FileHelper::CheckMandatoryElements()
       e_0002_0003->SetValue(Util::CreateUniqueUID());
       Archive->Push(e_0002_0003); 
 
-   ValEntry *e_0002_0010 = CopyValEntry(0x0002,0x0010);
-      //[Explicit VR - Little Endian] 
-      e_0002_0010->SetValue("1.2.840.10008.1.2.1"); 
-      Archive->Push(e_0002_0010);
    // 'Implementation Class UID'
    ValEntry *e_0002_0012 = CopyValEntry(0x0002,0x0012);
       e_0002_0012->SetValue(Util::CreateUniqueUID());
@@ -1366,6 +1345,23 @@ void FileHelper::CheckMandatoryElements()
    }
 } 
  
+/**
+ * \brief Restore in the File the initial group 0002
+ */
+void FileHelper::RestoreWriteMandatory()
+{
+   // group 0002 may be pushed out for ACR-NEMA writting purposes 
+   Archive->Restore(0x0002,0x0000);
+   Archive->Restore(0x0002,0x0001);
+   Archive->Restore(0x0002,0x0002);
+   Archive->Restore(0x0002,0x0003);
+   Archive->Restore(0x0002,0x0012);
+   Archive->Restore(0x0002,0x0013);
+   Archive->Restore(0x0002,0x0016);
+   Archive->Restore(0x0002,0x0100);
+   Archive->Restore(0x0002,0x0102);
+}
+
 //-----------------------------------------------------------------------------
 // Private
 /**
index 99633894cbcfbd1e782e5f31f1fbeeef405d0d17..9056534e0feec536c973fda59562c48d1877ea10 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmFileHelper.h,v $
   Language:  C++
-  Date:      $Date: 2005/02/21 17:45:41 $
-  Version:   $Revision: 1.15 $
+  Date:      $Date: 2005/03/09 09:45:33 $
+  Version:   $Revision: 1.16 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -153,6 +153,7 @@ protected:
    BinEntry *CopyBinEntry(uint16_t group, uint16_t elem, 
                           const std::string &vr);
    void CheckMandatoryElements();
+   void RestoreWriteMandatory();
 
 private:
    void Initialize();