X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmHeaderHelper.cxx;h=a5f78136d3eb6dcac4bb06e8be5420330c254f6c;hb=d3710448e1a6c462d762a10b9f02ca051bf090e3;hp=02690541380fc2a364efcdff2e787622dfdff290;hpb=e076cec25dcf959255d710a5cffdbe96d2998a7d;p=gdcm.git diff --git a/src/gdcmHeaderHelper.cxx b/src/gdcmHeaderHelper.cxx index 02690541..a5f78136 100644 --- a/src/gdcmHeaderHelper.cxx +++ b/src/gdcmHeaderHelper.cxx @@ -1,17 +1,7 @@ -// $Header: /cvs/public/gdcm/src/Attic/gdcmHeaderHelper.cxx,v 1.8 2003/09/24 16:46:38 jpr Exp $ - -//This is needed when compiling in debug mode -#ifdef _MSC_VER -#pragma warning ( disable : 4800 ) -// 'identifier' : class 'type' needs to have dll-interface to be used by -// clients of class 'type2' -#pragma warning ( disable : 4251 ) -// 'identifier' : identifier was truncated to 'number' characters in the -// debug information -#pragma warning ( disable : 4786 ) -#endif //_MSC_VER +// $Header: /cvs/public/gdcm/src/Attic/gdcmHeaderHelper.cxx,v 1.14 2003/10/27 14:01:12 jpr Exp $ #include "gdcmHeaderHelper.h" + #include "gdcmUtil.h" //for debug #include #include @@ -99,6 +89,33 @@ int gdcmHeaderHelper::GetPixelSize() { dbg.Verbose(0, "gdcmHeader::GetPixelSize: Unknown pixel type"); return 0; } + +//---------------------------------------------------------------------------- +/** + * \ingroup gdcmHeaderHelper + * \brief gets the info from 0028,0004 : Photometric Interp + * \ else 1. + * @return 1 if Gray level, 3 if Color + */ +int gdcmHeaderHelper::GetNumberOfScalarComponents() { + std::string PhotometricInterpretation = + gdcmHeader::GetPubElValByNumber(0x0028,0x0004); + + +// The compiler will optimze, if it feels like ! + + //beware of trailing space at end of string + if (PhotometricInterpretation.find(GDCM_UNFOUND) < PhotometricInterpretation.length() || + PhotometricInterpretation.find("MONOCHROME1") < PhotometricInterpretation.length() || + PhotometricInterpretation.find("MONOCHROME2") < PhotometricInterpretation.length() ) return 1; + + // WARNING : quick and dirty trick to produce a single plane Grey image + // See also gdcmFile::GetImageDataIntoVector() + // if(GetPubElValVoidAreaByNumber(0x0028,0x1201)==NULL) return 1; // Lut Red + // end of dirty trick + + return 3; +} //---------------------------------------------------------------------------- /** * \ingroup gdcmHeaderHelper @@ -146,15 +163,19 @@ std::string gdcmHeaderHelper::GetPixelType() { float gdcmHeaderHelper::GetXSpacing() { float xspacing, yspacing; std::string StrSpacing = GetPubElValByNumber(0x0028,0x0030); - - if (StrSpacing == GDCM_UNFOUND) { - dbg.Verbose(0, "gdcmHeader::GetXSpacing: unfound Pixel Spacing (0028,0030)"); - return 1.; - } - if( sscanf( StrSpacing.c_str(), "%f\\%f", &xspacing, &yspacing) != 2) - return 0.; - //else - return xspacing; + + if (StrSpacing == GDCM_UNFOUND) { + dbg.Verbose(0, "gdcmHeader::GetXSpacing: unfound Pixel Spacing (0028,0030)"); + return 1.; + } + if( sscanf( StrSpacing.c_str(), "%f\\%f", &yspacing, &xspacing) != 2) + return 0.; + if (xspacing == 0.) { + dbg.Verbose(0, "gdcmHeader::GetYSpacing: gdcmData/CT-MONO2-8-abdo.dcm problem"); + // seems to be a bug in the header ... + sscanf( StrSpacing.c_str(), "%f\\0\\%f", &yspacing, &xspacing); + } + return xspacing; } //---------------------------------------------------------------------------- /** @@ -171,12 +192,12 @@ float gdcmHeaderHelper::GetYSpacing() { dbg.Verbose(0, "gdcmHeader::GetYSpacing: unfound Pixel Spacing (0028,0030)"); return 1.; } - if( sscanf( StrSpacing.c_str(), "%f\\%f", &xspacing, &yspacing) != 2) + if( sscanf( StrSpacing.c_str(), "%f\\%f", &yspacing, &xspacing) != 2) return 0.; - if (yspacing == 0.) { + if (xspacing == 0.) { dbg.Verbose(0, "gdcmHeader::GetYSpacing: gdcmData/CT-MONO2-8-abdo.dcm problem"); // seems to be a bug in the header ... - sscanf( StrSpacing.c_str(), "%f\\0\\%f", &xspacing, &yspacing); + sscanf( StrSpacing.c_str(), "%f\\0\\%f", &yspacing, &xspacing); } return yspacing; }