From 21fa56d0388883f63f4cccf55cb42967d7ea5c30 Mon Sep 17 00:00:00 2001 From: regrain Date: Thu, 2 Dec 2004 15:14:15 +0000 Subject: [PATCH] * Test/TestCopyDicom.cxx : the new dicom created is created empty, without file name in input * src/gdcmSeqEntry.cxx : bug fix in destruction of an element * src/gdcmHeader.cxx : bug fix. Keep the string, otherwise it is destroyed. The string leaves only in the fonction. So when we make a .c_str(), we get the pointeur on the first element, element that will be destroyed immediately after thee instruction. * src/gdcmDocument.cxx : remove memory leaks. Bug fix when testing if the file has been opened : the test must be made on the content of the pointer and not directly on the pointer ! Code formatting -- BeNours --- ChangeLog | 13 ++++++ Testing/TestCopyDicom.cxx | 6 +-- src/gdcmDocument.cxx | 20 ++++++--- src/gdcmHeader.cxx | 90 +++++++++++++++++++-------------------- src/gdcmSeqEntry.cxx | 6 +-- 5 files changed, 78 insertions(+), 57 deletions(-) diff --git a/ChangeLog b/ChangeLog index 757a7515..96cee2d1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2004-12-02 Benoit Regrain + * Test/TestCopyDicom.cxx : the new dicom created is created empty, without + file name in input + * src/gdcmSeqEntry.cxx : bug fix in destruction of an element + * src/gdcmHeader.cxx : bug fix. Keep the string, otherwise it is destroyed. + The string leaves only in the fonction. So when we make a .c_str(), we + get the pointeur on the first element, element that will be destroyed + immediately after thee instruction. + * src/gdcmDocument.cxx : remove memory leaks. Bug fix when testing if the + file has been opened : the test must be made on the content of the + pointer and not directly on the pointer ! + Code formatting + 2004-12-02 Benoit Regrain * gdcmPython/gdcm.i : change gdcmHeaderHelper to gdcmSerieHeader. Now, the python part recompiles diff --git a/Testing/TestCopyDicom.cxx b/Testing/TestCopyDicom.cxx index cfbbfcdf..f9682db6 100644 --- a/Testing/TestCopyDicom.cxx +++ b/Testing/TestCopyDicom.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: TestCopyDicom.cxx,v $ Language: C++ - Date: $Date: 2004/11/26 10:55:03 $ - Version: $Revision: 1.23 $ + Date: $Date: 2004/12/02 15:14:16 $ + Version: $Revision: 1.24 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -74,7 +74,7 @@ int CopyDicom(std::string const & filename, //////////////// Step 1: std::cout << " 1..."; gdcm::Header *originalH = new gdcm::Header( filename ); - gdcm::Header *copyH = new gdcm::Header( output ); + gdcm::Header *copyH = new gdcm::Header( ); //First of all copy the header field by field diff --git a/src/gdcmDocument.cxx b/src/gdcmDocument.cxx index e561603b..2fd8fdfe 100644 --- a/src/gdcmDocument.cxx +++ b/src/gdcmDocument.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmDocument.cxx,v $ Language: C++ - Date: $Date: 2004/11/30 16:59:32 $ - Version: $Revision: 1.144 $ + Date: $Date: 2004/12/02 15:14:17 $ + Version: $Revision: 1.145 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -411,7 +411,11 @@ FileType Document::GetFileType() */ std::ifstream* Document::OpenFile() { - if (Filename.length() == 0) return 0; + if (Filename.length() == 0) + { + return 0; + } + if(Fp) { dbg.Verbose( 0, @@ -420,12 +424,13 @@ std::ifstream* Document::OpenFile() } Fp = new std::ifstream(Filename.c_str(), std::ios::in | std::ios::binary); - - if(!Fp) + if( ! *Fp ) { dbg.Verbose( 0, "Document::OpenFile cannot open file: ", Filename.c_str()); + delete Fp; + Fp = 0; return 0; } @@ -649,6 +654,7 @@ BinEntry* Document::ReplaceOrCreateByNumber( dbg.Verbose(0, "Document::ReplaceOrCreateByNumber: AddEntry" " failed allthough this is a creation."); } + delete currentEntry; } else { @@ -1887,7 +1893,8 @@ void Document::FindDocEntryVR( DocEntry *entry ) // within an explicit VR file. Hence we make sure the present tag // is in explicit VR and try to fix things if it happens not to be // the case. - + vr[0] = 0x00; + vr[1] = 0x00; Fp->read (vr, (size_t)2); vr[2] = 0; @@ -2397,6 +2404,7 @@ void Document::Initialise() RefShaDict = NULL; RLEInfo = new RLEFramesInfo; JPEGInfo = new JPEGFragmentsInfo; + Filetype = Unknown; } /** diff --git a/src/gdcmHeader.cxx b/src/gdcmHeader.cxx index c46ddb0f..99d63606 100644 --- a/src/gdcmHeader.cxx +++ b/src/gdcmHeader.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmHeader.cxx,v $ Language: C++ - Date: $Date: 2004/11/30 16:24:31 $ - Version: $Revision: 1.209 $ + Date: $Date: 2004/12/02 15:14:18 $ + Version: $Revision: 1.210 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -1309,57 +1309,57 @@ void Header::InitializeDefaultHeader() uint16_t elem; } DICOM_DEFAULT_VALUE; - const char *date = Util::GetCurrentDate().c_str(); - const char *time = Util::GetCurrentTime().c_str(); - const char *uid = Util::CreateUniqueUID().c_str(); + std::string date = Util::GetCurrentDate(); + std::string time = Util::GetCurrentTime(); + std::string uid = Util::CreateUniqueUID(); static DICOM_DEFAULT_VALUE defaultvalue[] = { "76", 0x0002, 0x0000, // MetaElementGroup Length // FIXME: how to recompute ? "1.2.840.10008.5.1.4.1.1.2", 0x0002, 0x0002, // MediaStorageSOPInstanceUID (CT Image Storage) - uid, 0x0002, 0x0012, // META Implementation Class UID - "ISO_IR 100", 0x0008, 0x0005, // Specific Character Set + uid.c_str(), 0x0002, 0x0012, // META Implementation Class UID + "ISO_IR 100",0x0008, 0x0005, // Specific Character Set "DERIVED\\SECONDARY\\OTHER\\GDCM", 0x0008, 0x0008, // Image Type "1.2.840.10008.5.1.4.1.1.2", 0x0008, 0x0016, // SOP Class UID - "", 0x0008, 0x0050, // Accession Number - "GDCM", 0x0008, 0x0070, // Manufacturer - "GDCM", 0x0008, 0x0080, // Institution Name + "", 0x0008, 0x0050, // Accession Number + "GDCM", 0x0008, 0x0070, // Manufacturer + "GDCM", 0x0008, 0x0080, // Institution Name "http://www-creatis.insa-lyon.fr/Public/Gdcm/", 0x0008, 0x0081, // Institution Address - "", 0x0008, 0x0090, // Refering Physician Name - "", 0x0008, 0x1030, // Study Description - "", 0x0008, 0x1050, // Performing Physician's Name - "", 0x0008, 0x1060, // Name of Physician(s) Reading Study - "", 0x0010, 0x0040, // Patient's Sex - uid, 0x0020, 0x000d, // StudyInstanceUID - uid, 0x0020, 0x000e, // SeriesInstanceUID - "", 0x0020, 0x0011, // AcquisitionNumber + "", 0x0008, 0x0090, // Refering Physician Name + "", 0x0008, 0x1030, // Study Description + "", 0x0008, 0x1050, // Performing Physician's Name + "", 0x0008, 0x1060, // Name of Physician(s) Reading Study + "", 0x0010, 0x0040, // Patient's Sex + uid.c_str(), 0x0020, 0x000d, // StudyInstanceUID + uid.c_str(), 0x0020, 0x000e, // SeriesInstanceUID + "", 0x0020, 0x0011, // AcquisitionNumber "1\\0\\0\\0\\1\\0", 0x0020, 0x0037, // Image Orientation Patient - "1", 0x0028, 0x0002, // Samples per pixel 1 or 3 - "MONOCHROME2", 0x0028, 0x0004, // photochromatic interpretation - -// Date and time - - date, 0x0008, 0x0012, // Instance Creation Date - time, 0x0008, 0x0013, // Instance Creation Time - date, 0x0008, 0x0020, // Study Date - date, 0x0008, 0x0022, // Acquisition Date - date, 0x0008, 0x0023, // Content Date - time, 0x0008, 0x0030, // Study Time - "CT", 0x0008, 0x0060, // Modality - "GDCM", 0x0010, 0x0010, // Patient's Name - "GDCMID", 0x0010, 0x0020, // Patient ID - "1", 0x0020, 0x0010, // StudyID - "1", 0x0020, 0x0011, // SeriesNumber - "1.0", 0x0018, 0x0050, // slice Thickness - "1.0", 0x0018, 0x0088, // space between slices - "1.0\\1.0", 0x0028, 0x0030, // pixelSpacing - "64", 0x0028, 0x0010, // nbRows - "64", 0x0028, 0x0011, // nbCols - "16", 0x0028, 0x0100, // BitsAllocated 8 or 16 - "12", 0x0028, 0x0101, // BitsStored 8 or 12 - "11", 0x0028, 0x0102, // HighBit 7 or 11 - "0", 0x0028, 0x0103, // Pixel Representation 0(unsigned) or 1(signed) - "1000.0", 0x0028, 0x1051, // Window Width - "500.0", 0x0028, 0x1050, // Window Center + "1", 0x0028, 0x0002, // Samples per pixel 1 or 3 + "MONOCHROME2",0x0028, 0x0004, // photochromatic interpretation + +// Date and timeG + + date.c_str(), 0x0008, 0x0012, // Instance Creation Date + time.c_str(), 0x0008, 0x0013, // Instance Creation Time + date.c_str(), 0x0008, 0x0020, // Study Date + date.c_str(), 0x0008, 0x0022, // Acquisition Date + date.c_str(), 0x0008, 0x0023, // Content Date + time.c_str(), 0x0008, 0x0030, // Study Time + "CT", 0x0008, 0x0060, // Modality + "GDCM", 0x0010, 0x0010, // Patient's Name + "GDCMID", 0x0010, 0x0020, // Patient ID + "1", 0x0020, 0x0010, // StudyID + "1", 0x0020, 0x0011, // SeriesNumber + "1.0", 0x0018, 0x0050, // slice Thickness + "1.0", 0x0018, 0x0088, // space between slices + "1.0\\1.0", 0x0028, 0x0030, // pixelSpacing + "64", 0x0028, 0x0010, // nbRows + "64", 0x0028, 0x0011, // nbCols + "16", 0x0028, 0x0100, // BitsAllocated 8 or 16 + "12", 0x0028, 0x0101, // BitsStored 8 or 12 + "11", 0x0028, 0x0102, // HighBit 7 or 11 + "0", 0x0028, 0x0103, // Pixel Representation 0(unsigned) or 1(signed) + "1000.0", 0x0028, 0x1051, // Window Width + "500.0", 0x0028, 0x1050, // Window Center 0, 0, 0 }; diff --git a/src/gdcmSeqEntry.cxx b/src/gdcmSeqEntry.cxx index 8ece4978..f7669d36 100644 --- a/src/gdcmSeqEntry.cxx +++ b/src/gdcmSeqEntry.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmSeqEntry.cxx,v $ Language: C++ - Date: $Date: 2004/11/25 15:46:11 $ - Version: $Revision: 1.38 $ + Date: $Date: 2004/12/02 15:14:18 $ + Version: $Revision: 1.39 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -72,7 +72,7 @@ SeqEntry::~SeqEntry() { delete *cc; } - if (!SeqTerm) + if (SeqTerm) { delete SeqTerm; } -- 2.48.1