X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmFileHelper.cxx;h=e823ccd7dc70288ff5e0ac9e13429fe17c51dff9;hb=4ae5f29bc5a2fa48c38fe43d331e5099aad4ed0f;hp=9005f118feabe1612282f3c4fdf41397838d90d1;hpb=ef0e08814ac95a5412e8650112e23add221767d1;p=gdcm.git diff --git a/src/gdcmFileHelper.cxx b/src/gdcmFileHelper.cxx index 9005f118..e823ccd7 100644 --- a/src/gdcmFileHelper.cxx +++ b/src/gdcmFileHelper.cxx @@ -4,8 +4,8 @@ Module: $RCSfile: gdcmFileHelper.cxx,v $ Language: C++ - Date: $Date: 2007/08/28 09:29:26 $ - Version: $Revision: 1.123 $ + Date: $Date: 2007/09/04 13:14:33 $ + Version: $Revision: 1.127 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -97,7 +97,6 @@ fh->Write(newFileName); // overwrites the file, if any - These lines will be moved to the document-to-be 'Developer's Guide' WriteMode : WMODE_RAW / WMODE_RGB @@ -764,9 +763,9 @@ bool FileHelper::Write(std::string const &fileName) // was : //PixelWriteConverter->SetCompressJPEGUserData( // inData, expectedSize, FileInternal); - PixelWriteConverter->SetCompressJPEGUserData( - PixelWriteConverter->GetUserData(), - PixelWriteConverter->GetUserDataSize(),FileInternal); + PixelWriteConverter->SetCompressJPEGUserData( + PixelWriteConverter->GetUserData(), + PixelWriteConverter->GetUserDataSize(),FileInternal); break; case JPEG2000: @@ -778,7 +777,6 @@ bool FileHelper::Write(std::string const &fileName) PixelWriteConverter->GetUserData(), PixelWriteConverter->GetUserDataSize(), FileInternal); - break; } @@ -850,14 +848,14 @@ bool FileHelper::CheckWriteIntegrity() int numberBitsAllocated = FileInternal->GetBitsAllocated(); if ( numberBitsAllocated == 0 || numberBitsAllocated == 12 ) { - gdcmWarningMacro( "numberBitsAllocated changed from " - << numberBitsAllocated << " to 16 " + gdcmWarningMacro( "numberBitsAllocated changed from " + << numberBitsAllocated << " to 16 " << " for consistency purpose" ); numberBitsAllocated = 16; } size_t decSize = FileInternal->GetXSize() - * FileInternal->GetYSize() + * FileInternal->GetYSize() * FileInternal->GetZSize() * FileInternal->GetTSize() * FileInternal->GetSamplesPerPixel() @@ -866,23 +864,24 @@ bool FileHelper::CheckWriteIntegrity() if ( FileInternal->HasLUT() ) rgbSize = decSize * 3; + size_t userDataSize = PixelWriteConverter->GetUserDataSize(); switch(WriteMode) { case WMODE_RAW : - if ( decSize!=PixelWriteConverter->GetUserDataSize() ) + if ( abs(decSize-userDataSize)>1) // ignore padding zero { gdcmWarningMacro( "Data size (Raw) is incorrect. Should be " << decSize << " / Found :" - << PixelWriteConverter->GetUserDataSize() ); + << userDataSize ); return false; } break; case WMODE_RGB : - if ( rgbSize!=PixelWriteConverter->GetUserDataSize() ) + if ( abs(rgbSize-userDataSize)>1) // ignore padding zero { gdcmWarningMacro( "Data size (RGB) is incorrect. Should be " - << decSize << " / Found " - << PixelWriteConverter->GetUserDataSize() ); + << rgbSize << " / Found " + << userDataSize ); return false; } break; @@ -1316,6 +1315,7 @@ We have to deal with 4 *very* different cases : -4) user modified/added some tags *without processing* the pixels (anonymization...) UNMODIFIED_PIXELS_IMAGE -Probabely some more to be added. + --> Set it with FileHelper::SetContentType(int); gdcm::FileHelper::CheckMandatoryElements() deals automatically with these cases. @@ -1508,45 +1508,39 @@ void FileHelper::CheckMandatoryElements() if ( ContentType != USER_OWN_IMAGE) // when it's not a user made image { - - gdcmDebugMacro( "USER_OWN_IMAGE (1)"); - // If 'SOP Class UID' exists ('true DICOM' image) + // If 'SOP Class UID' and 'SOP Instance UID' exist ('true DICOM' image) // we create the 'Source Image Sequence' SeqEntry // to hold informations about the Source Image DataEntry *e_0008_0016 = FileInternal->GetDataEntry(0x0008, 0x0016); - if ( e_0008_0016 ) + DataEntry *e_0008_0018 = FileInternal->GetDataEntry(0x0008, 0x0018); + if ( e_0008_0016 && e_0008_0018) { // Create 'Source Image Sequence' SeqEntry -// SeqEntry *sis = SeqEntry::New ( -// Global::GetDicts()->GetDefaultPubDict()->GetEntry(0x0008, 0x2112) ); SeqEntry *sis = SeqEntry::New (0x0008, 0x2112); SQItem *sqi = SQItem::New(1); - // (we assume 'SOP Instance UID' exists too) - // create 'Referenced SOP Class UID' -// DataEntry *e_0008_1150 = DataEntry::New( -// Global::GetDicts()->GetDefaultPubDict()->GetEntry(0x0008, 0x1150) ); + + // create 'Referenced SOP Class UID' from 'SOP Class UID' + DataEntry *e_0008_1150 = DataEntry::New(0x0008, 0x1150, "UI"); e_0008_1150->SetString( e_0008_0016->GetString()); sqi->AddEntry(e_0008_1150); e_0008_1150->Delete(); - // create 'Referenced SOP Instance UID' + // create 'Referenced SOP Instance UID' from 'SOP Instance UID' DataEntry *e_0008_0018 = FileInternal->GetDataEntry(0x0008, 0x0018); -// DataEntry *e_0008_1155 = DataEntry::New( -// Global::GetDicts()->GetDefaultPubDict()->GetEntry(0x0008, 0x1155) ); - DataEntry *e_0008_1155 = DataEntry::New(0x0008, 0x1155, "UI"); + + DataEntry *e_0008_1155 = DataEntry::New(0x0008, 0x1155, "UI"); e_0008_1155->SetString( e_0008_0018->GetString()); sqi->AddEntry(e_0008_1155); e_0008_1155->Delete(); - + sis->AddSQItem(sqi,1); sqi->Delete(); // temporarily replaces any previous 'Source Image Sequence' Archive->Push(sis); sis->Delete(); - // FIXME : is 'Image Type' *really* depending on the presence of 'SOP Class UID'? if ( ContentType == FILTERED_IMAGE) // the user *knows* he just modified the pixels @@ -1983,6 +1977,8 @@ void FileHelper::Initialize() PixelReadConverter = new PixelReadConvert; PixelWriteConverter = new PixelWriteConvert; Archive = new DocEntryArchive( FileInternal ); + + KeepOverlays = false; } /**