X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmFile.cxx;h=cf11b665b8e5586935e7d149c6fe4a4fdba0599b;hb=edbf0a74fea44d09f5263828d9091d3d321155b5;hp=9ba43132d36993af2ca089078c337e4afbace32a;hpb=4976cfdaa3bb61e01e7ad0a2382d7e9622918acd;p=gdcm.git diff --git a/src/gdcmFile.cxx b/src/gdcmFile.cxx index 9ba43132..cf11b665 100644 --- a/src/gdcmFile.cxx +++ b/src/gdcmFile.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmFile.cxx,v $ Language: C++ - Date: $Date: 2005/01/28 09:37:29 $ - Version: $Revision: 1.203 $ + Date: $Date: 2005/02/01 10:29:55 $ + Version: $Revision: 1.206 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -99,21 +99,37 @@ File::File( std::string const &filename ): ComputeJPEGFragmentInfo(); CloseFile(); - // Change the created dict entry - std::string PixelVR; - // 8 bits allocated is a 'O Bytes' , as well as 24 (old ACR-NEMA RGB) - // more than 8 (i.e 12, 16) is a 'O Words' - if ( GetBitsAllocated() == 8 || GetBitsAllocated() == 24 ) - PixelVR = "OB"; - else - PixelVR = "OW"; + // Create a new BinEntry to change the the DictEntry + // The changed DictEntry will have + // - a correct PixelVR OB or OW) + // - a VM to "PXL" + // - the name to "Pixel Data" + BinEntry *oldEntry = dynamic_cast(entry); + if(oldEntry) + { + std::string PixelVR; + // 8 bits allocated is a 'O Bytes' , as well as 24 (old ACR-NEMA RGB) + // more than 8 (i.e 12, 16) is a 'O Words' + if ( GetBitsAllocated() == 8 || GetBitsAllocated() == 24 ) + PixelVR = "OB"; + else + PixelVR = "OW"; + + // Change only made if usefull + if( PixelVR != oldEntry->GetVR() ) + { + DictEntry* newDict = NewVirtualDictEntry(GrPixel,NumPixel, + PixelVR,"1","Pixel Data"); - DictEntry* newEntry = NewVirtualDictEntry(GrPixel, NumPixel, - PixelVR, "PXL", "Pixel Data"); + BinEntry *newEntry = new BinEntry(newDict); + newEntry->Copy(entry); + newEntry->SetBinArea(oldEntry->GetBinArea(),oldEntry->IsSelfArea()); + oldEntry->SetSelfArea(false); - // friend class hunting : should we *create* a new entry, - // instead of modifying its DictEntry,in order not to use 'friend' ? - entry->SetDictEntry( newEntry ); + RemoveEntry(oldEntry); + AddEntry(newEntry); + } + } } } @@ -139,6 +155,8 @@ File::~File () delete JPEGInfo; } +//----------------------------------------------------------------------------- +// Public /** * \brief Performs some consistency checking on various 'File related' * (as opposed to 'DicomDir related') entries @@ -157,14 +175,21 @@ bool File::Write(std::string fileName, FileType filetype) return false; } + // Entry : 0002|0000 = group length -> recalculated + ValEntry *e0002 = GetValEntry(0x0002,0x0000); + if( e0002 ) + { + std::ostringstream sLen; + sLen << ComputeGroup0002Length(filetype); + e0002->SetValue(sLen.str()); + } + // Bits Allocated if ( GetEntryValue(0x0028,0x0100) == "12") { SetValEntry("16", 0x0028,0x0100); } - /// \todo correct 'Pixel group' Length if necessary - int i_lgPix = GetEntryLength(GrPixel, NumPixel); if (i_lgPix != -2) { @@ -178,7 +203,6 @@ bool File::Write(std::string fileName, FileType filetype) // (or in future gdcmPixelData class) // Drop Palette Color, if necessary - if ( GetEntryValue(0x0028,0x0002).c_str()[0] == '3' ) { // if SamplesPerPixel = 3, sure we don't need any LUT ! @@ -257,13 +281,6 @@ bool File::Write(std::string fileName, FileType filetype) return true; } -//----------------------------------------------------------------------------- -// Print - - -//----------------------------------------------------------------------------- -// Public - /** * \brief This predicate, based on hopefully reasonable heuristics, * decides whether or not the current File was properly parsed @@ -1658,5 +1675,7 @@ void File::ReadAndSkipEncapsulatedBasicOffsetTable() } //----------------------------------------------------------------------------- +// Print +//----------------------------------------------------------------------------- } // end namespace gdcm