X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmFile.cxx;h=61c2652e31592ddfbb59e5c57f632ee77f8b1dec;hb=83d6c83bfcdfa88b7f322286136f802e89d5830c;hp=5b23a36815ebc012a3227def9dd2f5a9e888e7db;hpb=ef3038db37c97f76c4d15ce248a18b00e967f6ce;p=gdcm.git diff --git a/src/gdcmFile.cxx b/src/gdcmFile.cxx index 5b23a368..61c2652e 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/03/09 19:31:54 $ - Version: $Revision: 1.229 $ + Date: $Date: 2005/05/11 14:40:57 $ + Version: $Revision: 1.236 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -46,12 +46,25 @@ namespace gdcm { //----------------------------------------------------------------------------- // Constructor / Destructor + +/** + * \brief Constructor used when we want to generate dicom files from scratch + */ +File::File(): + Document() +{ + RLEInfo = new RLEFramesInfo; + JPEGInfo = new JPEGFragmentsInfo; + GrPixel = 0x7fe0; + NumPixel = 0x0010; +} + /** * \brief Constructor * @param filename name of the file whose header we want to analyze */ File::File( std::string const &filename ) - :Document( filename ) + :Document(filename) { RLEInfo = new RLEFramesInfo; JPEGInfo = new JPEGFragmentsInfo; @@ -145,16 +158,6 @@ File::File( std::string const &filename ) } } -/** - * \brief Constructor used when we want to generate dicom files from scratch - */ -File::File(): - Document() -{ - RLEInfo = new RLEFramesInfo; - JPEGInfo = new JPEGFragmentsInfo; - InitializeDefaultFile(); -} /** * \brief Canonical destructor. @@ -169,6 +172,8 @@ File::~File () //----------------------------------------------------------------------------- // Public + + /** * \brief This predicate, based on hopefully reasonable heuristics, * decides whether or not the current File was properly parsed @@ -263,10 +268,14 @@ ModalityType File::GetModality() else if ( strModality.find("PT") < strModality.length()) return PT; else if ( strModality.find("RF") < strModality.length()) return RF; else if ( strModality.find("RG") < strModality.length()) return RG; - else if ( strModality.find("RTDOSE") < strModality.length()) return RTDOSE; - else if ( strModality.find("RTIMAGE") < strModality.length()) return RTIMAGE; - else if ( strModality.find("RTPLAN") < strModality.length()) return RTPLAN; - else if ( strModality.find("RTSTRUCT") < strModality.length()) return RTSTRUCT; + else if ( strModality.find("RTDOSE") + < strModality.length()) return RTDOSE; + else if ( strModality.find("RTIMAGE") + < strModality.length()) return RTIMAGE; + else if ( strModality.find("RTPLAN") + < strModality.length()) return RTPLAN; + else if ( strModality.find("RTSTRUCT") + < strModality.length()) return RTSTRUCT; else if ( strModality.find("SM") < strModality.length()) return SM; else if ( strModality.find("ST") < strModality.length()) return ST; else if ( strModality.find("TG") < strModality.length()) return TG; @@ -422,7 +431,7 @@ float File::GetYSpacing() // if sscanf cannot read any float value, it won't affect yspacing int nbValues = sscanf( strSpacing.c_str(), "%f", &yspacing); - // if no values, xspacing is set to 1.0 + // if no values, yspacing is set to 1.0 if( nbValues == 0 ) yspacing = 1.0; @@ -818,20 +827,21 @@ std::string File::GetPixelType() } /** - * \brief Check whether the pixels are signed or UNsigned data. - * \warning The method defaults to false (UNsigned) when information is Missing. + * \brief Check whether the pixels are signed (1) or UNsigned (0) data. + * \warning The method defaults to false (UNsigned) when tag 0028|0103 + * is missing. * The responsability of checking this value is left to the caller. * @return True when signed, false when UNsigned */ bool File::IsSignedPixelData() { - std::string strSize = GetEntryValue( 0x0028, 0x0103 ); - if ( strSize == GDCM_UNFOUND ) + std::string strSign = GetEntryValue( 0x0028, 0x0103 ); + if ( strSign == GDCM_UNFOUND ) { gdcmWarningMacro( "(0028,0103) is supposed to be mandatory"); return false; } - int sign = atoi( strSize.c_str() ); + int sign = atoi( strSign.c_str() ); if ( sign == 0 ) { return false; @@ -1337,12 +1347,6 @@ bool File::Write(std::string fileName, FileType writetype) e0000->SetValue(sLen.str()); } - // Bits Allocated - if ( GetEntryValue(0x0028,0x0100) == "12") - { - SetValEntry("16", 0x0028,0x0100); - } - int i_lgPix = GetEntryLength(GrPixel, NumPixel); if (i_lgPix != -2) { @@ -1352,48 +1356,6 @@ bool File::Write(std::string fileName, FileType writetype) InsertValEntry(s_lgPix,GrPixel, 0x0000); } - // FIXME : should be nice if we could move it to File - // (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 ! - // Drop 0028|1101, 0028|1102, 0028|1103 - // Drop 0028|1201, 0028|1202, 0028|1203 - - DocEntry *e = GetDocEntry(0x0028,0x01101); - if (e) - { - RemoveEntryNoDestroy(e); - } - e = GetDocEntry(0x0028,0x1102); - if (e) - { - RemoveEntryNoDestroy(e); - } - e = GetDocEntry(0x0028,0x1103); - if (e) - { - RemoveEntryNoDestroy(e); - } - e = GetDocEntry(0x0028,0x01201); - if (e) - { - RemoveEntryNoDestroy(e); - } - e = GetDocEntry(0x0028,0x1202); - if (e) - { - RemoveEntryNoDestroy(e); - } - e = GetDocEntry(0x0028,0x1203); - if (e) - { - RemoveEntryNoDestroy(e); - } - } - Document::WriteContent(fp, writetype); fp->close(); @@ -1404,26 +1366,7 @@ bool File::Write(std::string fileName, FileType writetype) //----------------------------------------------------------------------------- // Protected -/** - * \brief Initialize a default DICOM File that should contain all the - * fields required by other readers. DICOM standard does not - * explicitely defines those fields, heuristic has been choosen. - * \todo final removal of this method - * with FileHelper::CheckMandatoryElements() - */ -void File::InitializeDefaultFile() -{ - // fixme - // Just to avoid further trouble if user asks - //to write the file ACR-NEMA mode - - InsertValEntry("", 0x0008, 0x0010); // Recognition Code (RET) - - // fixme - GrPixel = 0x7fe0; - NumPixel = 0x0010; -} //----------------------------------------------------------------------------- // Private @@ -1463,7 +1406,7 @@ void File::ComputeRLEInfo() // - when more than one frame are present, then we are in // the case of a multi-frame image. long frameLength; - while ( (frameLength = ReadTagLength(0xfffe, 0xe000)) ) + while ( (frameLength = ReadTagLength(0xfffe, 0xe000)) != 0 ) { // Parse the RLE Header and store the corresponding RLE Segment // Offset Table information on fragments of this current Frame. @@ -1542,7 +1485,7 @@ void File::ComputeJPEGFragmentInfo() // Loop on the fragments[s] and store the parsed information in a // JPEGInfo. long fragmentLength; - while ( (fragmentLength = ReadTagLength(0xfffe, 0xe000)) ) + while ( (fragmentLength = ReadTagLength(0xfffe, 0xe000)) != 0 ) { long fragmentOffset = Fp->tellg();