]> Creatis software - gdcm.git/blobdiff - src/gdcmHeaderHelper.cxx
*Removal of ido stuff
[gdcm.git] / src / gdcmHeaderHelper.cxx
index 3508803987222a9318487e0c66f4afdca3d9a26f..a5f78136d3eb6dcac4bb06e8be5420330c254f6c 100644 (file)
@@ -1,4 +1,4 @@
-// $Header: /cvs/public/gdcm/src/Attic/gdcmHeaderHelper.cxx,v 1.9 2003/10/02 11:26:16 malaterre Exp $
+// $Header: /cvs/public/gdcm/src/Attic/gdcmHeaderHelper.cxx,v 1.14 2003/10/27 14:01:12 jpr Exp $
 
 #include "gdcmHeaderHelper.h"
 
@@ -89,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
@@ -136,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;
 }
 //----------------------------------------------------------------------------
 /**
@@ -161,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;
 }