]> Creatis software - gdcm.git/blobdiff - src/gdcmFile.cxx
COMP: another cast needed for vs7
[gdcm.git] / src / gdcmFile.cxx
index c0adb1046482f3d194bd8570c238bb52909468e9..a1c975f42ade566949abe80bf1a2f53aad203ff0 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmFile.cxx,v $
   Language:  C++
-  Date:      $Date: 2005/05/29 21:56:36 $
-  Version:   $Revision: 1.239 $
+  Date:      $Date: 2005/06/10 14:05:37 $
+  Version:   $Revision: 1.242 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -55,7 +55,7 @@ File::File():
 {
    RLEInfo  = new RLEFramesInfo;
    JPEGInfo = new JPEGFragmentsInfo;
-   GrPixel  = 0x7fe0;
+   GrPixel  = 0x7fe0;  // to avoid further troubles
    NumPixel = 0x0010;
 }
 
@@ -69,6 +69,33 @@ File::File( std::string const &filename )
    RLEInfo  = new RLEFramesInfo;
    JPEGInfo = new JPEGFragmentsInfo;
 
+   Load( filename );
+}
+
+/**
+ * \brief   Canonical destructor.
+ */
+File::~File ()
+{
+   if( RLEInfo )
+      delete RLEInfo;
+   if( JPEGInfo )
+      delete JPEGInfo;
+}
+
+//-----------------------------------------------------------------------------
+// Public
+
+/**
+ * \brief   Loader  
+ * @param   fileName file to be open for parsing
+ * @return false if file cannot be open or no swap info was found,
+ *         or no tag was found.
+ */
+bool File::Load( std::string const &fileName ) 
+{
+   this->Document::Load( fileName );
+
    // for some ACR-NEMA images GrPixel, NumPixel is *not* 7fe0,0010
    // We may encounter the 'RETired' (0x0028, 0x0200) tag
    // (Image Location") . This entry contains the number of
@@ -125,7 +152,7 @@ File::File( std::string const &filename )
          ComputeJPEGFragmentInfo();
       CloseFile();
 
-      // Create a new BinEntry to change the the DictEntry
+      // Create a new BinEntry to change the DictEntry
       // The changed DictEntry will have 
       // - a correct PixelVR OB or OW)
       // - the name to "Pixel Data"
@@ -156,24 +183,8 @@ File::File( std::string const &filename )
          }
       }
    }
+   return true;
 }
-
-
-/**
- * \brief   Canonical destructor.
- */
-File::~File ()
-{
-   if( RLEInfo )
-      delete RLEInfo;
-   if( JPEGInfo )
-      delete JPEGInfo;
-}
-
-//-----------------------------------------------------------------------------
-// Public
-
-
 /**
  * \brief  This predicate, based on hopefully reasonable heuristics,
  *         decides whether or not the current File was properly parsed
@@ -192,25 +203,35 @@ bool File::IsReadable()
    const std::string &res = GetEntryValue(0x0028, 0x0005);
    if ( res != GDCM_UNFOUND && atoi(res.c_str()) > 4 )
    {
+      gdcmWarningMacro("Wrong Image Dimensions" << res);
       return false; // Image Dimensions
    }
    if ( !GetDocEntry(0x0028, 0x0100) )
    {
+      gdcmWarningMacro("Bits Allocated (0028|0100) not found"); 
       return false; // "Bits Allocated"
    }
    if ( !GetDocEntry(0x0028, 0x0101) )
    {
+      gdcmWarningMacro("Bits Stored (0028|0101) not found");
       return false; // "Bits Stored"
    }
    if ( !GetDocEntry(0x0028, 0x0102) )
    {
+      gdcmWarningMacro("Hight Bit (0028|0102) not found"); 
       return false; // "High Bit"
    }
    if ( !GetDocEntry(0x0028, 0x0103) )
    {
+      gdcmWarningMacro("Pixel Representation (0028|0103) not found");
       return false; // "Pixel Representation" i.e. 'Sign'
    }
-
+   if ( !GetDocEntry(GrPixel, NumPixel) )
+   {
+      gdcmWarningMacro("Pixel Dicom Element " << std::hex <<
+                        GrPixel << "|" << NumPixel << "not found");
+      return false; // Pixel Dicom Element not found :-(
+   }
    return true;
 }