]> Creatis software - gdcm.git/blobdiff - src/gdcmHeader.cxx
* ENH: vtkgdcmViewer now autoscale color/window level on start-up, no need to press...
[gdcm.git] / src / gdcmHeader.cxx
index 0a222f0facb99d3f884a92ae474a70c01da56c8c..13da756dc1bde8eecaabd7bc93872e5051b7e24e 100644 (file)
@@ -1,4 +1,4 @@
-// $Header: /cvs/public/gdcm/src/Attic/gdcmHeader.cxx,v 1.97 2003/10/09 14:58:28 malaterre Exp $
+// $Header: /cvs/public/gdcm/src/Attic/gdcmHeader.cxx,v 1.101 2003/10/15 15:01:16 jpr Exp $
 
 #include "gdcmHeader.h"
 
@@ -72,9 +72,26 @@ gdcmHeader::gdcmHeader(bool exception_on_error) {
     if(!fp)
       throw gdcmFileError("gdcmHeader::gdcmHeader(const char *, bool)");
   }
-  if ( fp )
-     return true;
-  dbg.Verbose(0, "gdcmHeader::gdcmHeader cannot open file", filename.c_str());
+
+  if ( fp ) {
+     guint16 zero;
+     fread(&zero,  (size_t)2, (size_t)1, fp);
+
+    //ACR -- or DICOM with no Preamble
+    if( zero == 0x0008 || zero == 0x0800 || zero == 0x0002 || zero == 0x0200)
+       return true;
+    //DICOM
+    fseek(fp, 126L, SEEK_CUR);
+    char dicm[4];
+    fread(dicm,  (size_t)4, (size_t)1, fp);
+    if( memcmp(dicm, "DICM", 4) == 0 )
+       return true;
+    fclose(fp);
+    dbg.Verbose(0, "gdcmHeader::gdcmHeader not DICOM/ACR", filename.c_str());
+  }
+  else {
+    dbg.Verbose(0, "gdcmHeader::gdcmHeader cannot open file", filename.c_str());
+  }
   return false;
 }