]> Creatis software - gdcm.git/blobdiff - src/gdcmHeaderHelper.cxx
* change GetXSpacing and GetYSpacing "%f\\%" is parsed backward.
[gdcm.git] / src / gdcmHeaderHelper.cxx
index eeca030fcd5932e381e11cdd1c8534779c801aaf..2917c573c430fc59972c85a7f911f4afa487f9b2 100644 (file)
@@ -1,17 +1,7 @@
-// $Header: /cvs/public/gdcm/src/Attic/gdcmHeaderHelper.cxx,v 1.7 2003/09/24 14:01:04 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.12 2003/10/06 15:32:48 malaterre Exp $
 
 #include "gdcmHeaderHelper.h"
+
 #include "gdcmUtil.h" //for debug
 #include <math.h>
 #include <algorithm>
@@ -99,6 +89,28 @@ 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;
+
+      return 3;
+}
 //----------------------------------------------------------------------------
 /**
  * \ingroup gdcmHeaderHelper
@@ -151,7 +163,7 @@ float gdcmHeaderHelper::GetXSpacing() {
        dbg.Verbose(0, "gdcmHeader::GetXSpacing: 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.;
    //else
    return xspacing;
@@ -171,12 +183,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.) {
     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;
 } 
@@ -389,10 +401,10 @@ ModalityType gdcmHeaderHelper::GetModality(void) {
     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;
@@ -414,22 +426,22 @@ ModalityType gdcmHeaderHelper::GetModality(void) {
 //----------------------------------------------------------------------------
 std::string gdcmHeaderHelper::GetStudyUID()
 {
-  return GetPubElValByNumber(0x0020,0x000d); //!0020 000d UI REL Study Instance UID
+  return GetPubElValByNumber(0x0020,0x000d); //0020 000d UI REL Study Instance UID
 }
 //----------------------------------------------------------------------------
 std::string gdcmHeaderHelper::GetSeriesUID()
 {
-  return GetPubElValByNumber(0x0020,0x000e); //!0020 000e UI REL Series Instance UID
+  return GetPubElValByNumber(0x0020,0x000e); //0020 000e UI REL Series Instance UID
 }
 //----------------------------------------------------------------------------
 std::string gdcmHeaderHelper::GetClassUID()
 {
-  return GetPubElValByNumber(0x0008,0x0016); //!0008 0016 UI ID SOP Class UID
+  return GetPubElValByNumber(0x0008,0x0016); //0008 0016 UI ID SOP Class UID
 }
 //----------------------------------------------------------------------------
 std::string gdcmHeaderHelper::GetInstanceUID()
 {
-  return GetPubElValByNumber(0x0008,0x0018); //!0008 0018 UI ID SOP Instance UID
+  return GetPubElValByNumber(0x0008,0x0018); //0008 0018 UI ID SOP Instance UID
 }
 
 
@@ -524,7 +536,7 @@ void gdcmSerieHeaderHelper::SetDirectory(std::string dir)
 //----------------------------------------------------------------------------
 //This could be implemented in a 'Strategy Pattern' approach
 //But as I don't know how to do it, I leave it this way
-//BTW, this is also a Strategy, I don't know this is the best approcah :)
+//BTW, this is also a Strategy, I don't know this is the best approach :)
 void gdcmSerieHeaderHelper::OrderGdcmFileList()
 {
   if( ImagePositionPatientOrdering() )