X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmFileHelper.cxx;h=850c3344270ab4f72d09095d5d4b822f1d0000c7;hb=fdca8d2cc7f1a716e591540de386c88dabbf6031;hp=319835d2d05518e023bc307551a547ca49262206;hpb=a13034de9a7e4aeac28ca151706ed34881b402a4;p=gdcm.git diff --git a/src/gdcmFileHelper.cxx b/src/gdcmFileHelper.cxx index 319835d2..850c3344 100644 --- a/src/gdcmFileHelper.cxx +++ b/src/gdcmFileHelper.cxx @@ -4,8 +4,8 @@ Module: $RCSfile: gdcmFileHelper.cxx,v $ Language: C++ - Date: $Date: 2005/06/20 17:10:17 $ - Version: $Revision: 1.44 $ + Date: $Date: 2005/07/11 08:30:39 $ + Version: $Revision: 1.48 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -146,7 +146,8 @@ FileHelper::FileHelper(File *header) } /** - * \brief Constructor dedicated to deal with the *pixels* area of a ACR/DICOMV3 + * \brief DEPRECATED : use SetFilename() + Load() methods + * Constructor dedicated to deal with the *pixels* area of a ACR/DICOMV3 * file (gdcm::File only deals with the ... header) * Opens (in read only and when possible) an existing file and checks * for DICOM compliance. Returns NULL on failure. @@ -172,20 +173,20 @@ FileHelper::FileHelper(std::string const &filename ) */ FileHelper::~FileHelper() { - if( PixelReadConverter ) + if ( PixelReadConverter ) { delete PixelReadConverter; } - if( PixelWriteConverter ) + if ( PixelWriteConverter ) { delete PixelWriteConverter; } - if( Archive ) + if ( Archive ) { delete Archive; } - if( SelfHeader ) + if ( SelfHeader ) { delete FileInternal; } @@ -194,6 +195,39 @@ FileHelper::~FileHelper() //----------------------------------------------------------------------------- // Public + +/** + * \brief Sets the LoadMode of the internal gdcm::File as a boolean string. + * NO_SEQ, NO_SHADOW, NO_SHADOWSEQ + *... (nothing more, right now) + * WARNING : before using NO_SHADOW, be sure *all* your files + * contain accurate values in the 0x0000 element (if any) + * of *each* Shadow Group. The parser will fail if the size is wrong ! + * @param loadMode Load mode to be used + */ +void FileHelper::SetLoadMode(int loadMode) +{ + GetFile()->SetLoadMode( loadMode ); +} +/** + * \brief Sets the LoadMode of the internal gdcm::File + * @param fileName name of the file to be open + */ +void FileHelper::SetFileName(std::string const &fileName) +{ + FileInternal->SetFileName( fileName ); +} + +/** + * \brief Loader + * @return false if file cannot be open or no swap info was found, + * or no tag was found. + */ +bool FileHelper::Load() +{ + return FileInternal->Load(); +} + /** * \brief Accesses an existing DocEntry (i.e. a Dicom Element) * through it's (group, element) and modifies it's content with @@ -538,7 +572,7 @@ bool FileHelper::WriteRawData(std::string const &fileName) return false; } - if( PixelWriteConverter->GetUserData() ) + if ( PixelWriteConverter->GetUserData() ) { fp1.write( (char *)PixelWriteConverter->GetUserData(), PixelWriteConverter->GetUserDataSize() ); @@ -655,7 +689,7 @@ bool FileHelper::Write(std::string const &fileName) /// \todo the best trick would be *change* the recognition code /// but pb expected if user deals with, e.g. COMPLEX images - if( WriteType == ACR_LIBIDO ) + if ( WriteType == ACR_LIBIDO ) { SetWriteToLibido(); } @@ -676,7 +710,7 @@ bool FileHelper::Write(std::string const &fileName) } bool check = CheckWriteIntegrity(); // verifies length - if(check) + if (check) { check = FileInternal->Write(fileName,WriteType); } @@ -708,7 +742,7 @@ bool FileHelper::Write(std::string const &fileName) */ bool FileHelper::CheckWriteIntegrity() { - if(PixelWriteConverter->GetUserData()) + if ( PixelWriteConverter->GetUserData() ) { int numberBitsAllocated = FileInternal->GetBitsAllocated(); if ( numberBitsAllocated == 0 || numberBitsAllocated == 12 ) @@ -725,13 +759,13 @@ bool FileHelper::CheckWriteIntegrity() * FileInternal->GetSamplesPerPixel() * ( numberBitsAllocated / 8 ); size_t rgbSize = decSize; - if( FileInternal->HasLUT() ) + if ( FileInternal->HasLUT() ) rgbSize = decSize * 3; switch(WriteMode) { case WMODE_RAW : - if( decSize!=PixelWriteConverter->GetUserDataSize() ) + if ( decSize!=PixelWriteConverter->GetUserDataSize() ) { gdcmWarningMacro( "Data size (Raw) is incorrect. Should be " << decSize << " / Found :" @@ -740,7 +774,7 @@ bool FileHelper::CheckWriteIntegrity() } break; case WMODE_RGB : - if( rgbSize!=PixelWriteConverter->GetUserDataSize() ) + if ( rgbSize!=PixelWriteConverter->GetUserDataSize() ) { gdcmWarningMacro( "Data size (RGB) is incorrect. Should be " << decSize << " / Found " @@ -760,15 +794,15 @@ bool FileHelper::CheckWriteIntegrity() */ void FileHelper::SetWriteToRaw() { - if( FileInternal->GetNumberOfScalarComponents() == 3 - && !FileInternal->HasLUT()) + if ( FileInternal->GetNumberOfScalarComponents() == 3 + && !FileInternal->HasLUT() ) { SetWriteToRGB(); } else { ValEntry *photInt = CopyValEntry(0x0028,0x0004); - if(FileInternal->HasLUT()) + if (FileInternal->HasLUT() ) { photInt->SetValue("PALETTE COLOR "); } @@ -781,9 +815,9 @@ void FileHelper::SetWriteToRaw() PixelReadConverter->GetRawSize()); std::string vr = "OB"; - if( FileInternal->GetBitsAllocated()>8 ) + if ( FileInternal->GetBitsAllocated()>8 ) vr = "OW"; - if( FileInternal->GetBitsAllocated()==24 ) // For RGB ACR files + if ( FileInternal->GetBitsAllocated()==24 ) // For RGB ACR files vr = "OB"; BinEntry *pixel = CopyBinEntry(GetFile()->GetGrPixel(),GetFile()->GetNumPixel(),vr); @@ -805,7 +839,7 @@ void FileHelper::SetWriteToRaw() */ void FileHelper::SetWriteToRGB() { - if(FileInternal->GetNumberOfScalarComponents()==3) + if ( FileInternal->GetNumberOfScalarComponents()==3 ) { PixelReadConverter->BuildRGBImage(); @@ -818,7 +852,7 @@ void FileHelper::SetWriteToRGB() ValEntry *photInt = CopyValEntry(0x0028,0x0004); photInt->SetValue("RGB "); - if(PixelReadConverter->GetRGB()) + if ( PixelReadConverter->GetRGB() ) { PixelWriteConverter->SetReadData(PixelReadConverter->GetRGB(), PixelReadConverter->GetRGBSize()); @@ -830,9 +864,9 @@ void FileHelper::SetWriteToRGB() } std::string vr = "OB"; - if( FileInternal->GetBitsAllocated()>8 ) + if ( FileInternal->GetBitsAllocated()>8 ) vr = "OW"; - if( FileInternal->GetBitsAllocated()==24 ) // For RGB ACR files + if ( FileInternal->GetBitsAllocated()==24 ) // For RGB ACR files vr = "OB"; BinEntry *pixel = CopyBinEntry(GetFile()->GetGrPixel(),GetFile()->GetNumPixel(),vr); @@ -859,7 +893,7 @@ void FileHelper::SetWriteToRGB() // For old '24 Bits' ACR-NEMA // Thus, we have a RGB image and the bits allocated = 24 and // samples per pixels = 1 (in the read file) - if(FileInternal->GetBitsAllocated()==24) + if ( FileInternal->GetBitsAllocated()==24 ) { ValEntry *bitsAlloc = CopyValEntry(0x0028,0x0100); bitsAlloc->SetValue("8 "); @@ -988,7 +1022,7 @@ void FileHelper::SetWriteToLibido() ValEntry *oldCol = dynamic_cast (FileInternal->GetDocEntry(0x0028, 0x0011)); - if( oldRow && oldCol ) + if ( oldRow && oldCol ) { std::string rows, columns; @@ -1017,9 +1051,9 @@ void FileHelper::SetWriteToNoLibido() { ValEntry *recCode = dynamic_cast (FileInternal->GetDocEntry(0x0008,0x0010)); - if( recCode ) + if ( recCode ) { - if( recCode->GetValue() == "ACRNEMA_LIBIDO_1.1" ) + if ( recCode->GetValue() == "ACRNEMA_LIBIDO_1.1" ) { ValEntry *libidoCode = CopyValEntry(0x0008,0x0010); libidoCode->SetValue(""); @@ -1055,7 +1089,7 @@ ValEntry *FileHelper::CopyValEntry(uint16_t group, uint16_t elem) DocEntry *oldE = FileInternal->GetDocEntry(group, elem); ValEntry *newE; - if( oldE ) + if ( oldE ) { newE = new ValEntry(oldE->GetDictEntry()); newE->Copy(oldE); @@ -1082,11 +1116,11 @@ BinEntry *FileHelper::CopyBinEntry(uint16_t group, uint16_t elem, DocEntry *oldE = FileInternal->GetDocEntry(group, elem); BinEntry *newE; - if( oldE ) - if( oldE->GetVR()!=vr ) + if ( oldE ) + if ( oldE->GetVR()!=vr ) oldE = NULL; - if( oldE ) + if ( oldE ) { newE = new BinEntry(oldE->GetDictEntry()); newE->Copy(oldE); @@ -1174,7 +1208,7 @@ void FileHelper::CheckMandatoryElements() // 'Implementation Version Name' ValEntry *e_0002_0013 = CopyValEntry(0x0002,0x0013); - e_0002_0013->SetValue("GDCM 1.0"); + e_0002_0013->SetValue("GDCM 1.1"); Archive->Push(e_0002_0013); //'Source Application Entity Title' Not Mandatory @@ -1499,7 +1533,7 @@ uint8_t *FileHelper::GetRaw() // The Raw image migth not be loaded yet: std::ifstream *fp = FileInternal->OpenFile(); PixelReadConverter->ReadAndDecompressPixelData( fp ); - if(fp) + if ( fp ) FileInternal->CloseFile(); raw = PixelReadConverter->GetRaw();