]> Creatis software - gdcm.git/blobdiff - src/gdcmHeader.cxx
* When compiling with distutils (see setup.py) the C++ compiler is
[gdcm.git] / src / gdcmHeader.cxx
index 82c31a0fa29d00f8664537d6cf6ff56c9df250d0..29955e13029d535e3746bba7de03d1aabe8dcc59 100644 (file)
@@ -1,4 +1,4 @@
-// gdcmHeader.cxx
+// $Header: /cvs/public/gdcm/src/Attic/gdcmHeader.cxx,v 1.68 2003/05/28 19:36:21 frog Exp $
 
 #include <stdio.h>
 #include <cerrno>
 #include <sstream>
 #include "gdcmUtil.h"
 #include "gdcmHeader.h"
+using namespace std;
 
 // Refer to gdcmHeader::CheckSwap()
 #define HEADER_LENGTH_TO_READ       256
 // Refer to gdcmHeader::SetMaxSizeLoadElementValue()
 #define _MaxSizeLoadElementValue_   1024
 
-gdcmVR * gdcmHeader::dicom_vr = (gdcmVR*)0;
-gdcmDictSet * gdcmHeader::Dicts    = (gdcmDictSet*)0;
-
 void gdcmHeader::Initialise(void) {
-   if (!gdcmHeader::dicom_vr)
-      gdcmHeader::dicom_vr = gdcmGlobal::GetVR();
-   if (!gdcmHeader::Dicts)
-      gdcmHeader::Dicts = gdcmGlobal::GetDicts();
+   dicom_vr = gdcmGlobal::GetVR();
+   Dicts = gdcmGlobal::GetDicts();
    RefPubDict = Dicts->GetDefaultPubDict();
    RefShaDict = (gdcmDict*)0;
 }
@@ -34,7 +30,8 @@ gdcmHeader::gdcmHeader(const char *InFilename, bool exception_on_error) {
   SetMaxSizeLoadElementValue(_MaxSizeLoadElementValue_);
   filename = InFilename;
   Initialise();
-  OpenFile(exception_on_error);
+  if ( !OpenFile(exception_on_error))
+     return;
   ParseHeader();
   LoadElements();
   CloseFile();
@@ -47,10 +44,9 @@ bool gdcmHeader::OpenFile(bool exception_on_error)
     if(!fp)
       throw gdcmFileError("gdcmHeader::gdcmHeader(const char *, bool)");
   }
-  else
-    dbg.Error(!fp, "gdcmHeader::gdcmHeader cannot open file", filename.c_str());
   if ( fp )
      return true;
+  dbg.Verbose(0, "gdcmHeader::gdcmHeader cannot open file", filename.c_str());
   return false;
 }
 
@@ -433,6 +429,7 @@ bool gdcmHeader::IsJPEGLossless(void) {
       return false;
    LoadElementValueSafe(Element);
    const char * Transfert = Element->GetValue().c_str();
+   printf("TransfertSyntx %s\n",Transfert);
    if ( memcmp(Transfert+strlen(Transfert)-2 ,"70",2)==0) return true;
    if ( memcmp(Transfert+strlen(Transfert)-2 ,"55",2)==0) return true;
    return false;
@@ -717,7 +714,6 @@ void gdcmHeader::SetMaxSizeLoadElementValue(long NewSize) {
 void gdcmHeader::LoadElementValue(gdcmElValue * ElVal) {
    size_t item_read;
    guint16 group  = ElVal->GetGroup();
-   guint16 elem   = ElVal->GetElement();
    string  vr     = ElVal->GetVR();
    guint32 length = ElVal->GetLength();
    bool SkipLoad  = false;
@@ -867,6 +863,18 @@ guint32 gdcmHeader::ReadInt32(void) {
    return g;
 }
 
+
+gdcmElValue* gdcmHeader::GetElValueByNumber(guint16 Group, guint16 Elem) {
+
+   gdcmElValue* elValue = PubElValSet.GetElementByNumber(Group, Elem);  
+   if (!elValue) {
+      dbg.Verbose(1, "gdcmHeader::GetElValueByNumber",
+                  "failed to Locate gdcmElValue");
+      return (gdcmElValue*)0;
+   }
+   return elValue;
+}
+
 /**
  * \ingroup gdcmHeader
  * \brief   Build a new Element Value from all the low level arguments. 
@@ -973,10 +981,11 @@ bool gdcmHeader::IsAnInteger(gdcmElValue * ElVal) {
       if (length == 4)
          return true;
       else {
-         printf("Erroneous Group Length element length %d\n",length);
+         printf("Erroneous Group Length element length (%04x , %04x) : %d\n",
+            group, element,length);
                     
          dbg.Error("gdcmHeader::IsAnInteger",
-                   "Erroneous Group Length element length.");     
+            "Erroneous Group Length element length.");     
       }
    }
  
@@ -1295,7 +1304,11 @@ string gdcmHeader::GetElValRepByName(string TagName) {
  */
 int gdcmHeader::SetPubElValByNumber(string content, guint16 group,
                                     guint16 element)
+                                    
+//TODO  : homogeneiser les noms : SetPubElValByNumber   qui appelle PubElValSet.SetElValueByNumber 
+//        pourquoi pas            SetPubElValueByNumber ??
 {
+
    return (  PubElValSet.SetElValueByNumber (content, group, element) );
 }
 
@@ -1427,18 +1440,36 @@ int gdcmHeader::GetZSize(void) {
    return 1;
 }
 
+/**
+ * \ingroup gdcmHeader
+ * \brief   Return the size (in bytes) of a single pixel of data.
+ * @return  The size in bytes of a single pixel of data.
+ *
+ */
+int gdcmHeader::GetPixelSize(void) {
+   string PixelType = GetPixelType();
+   if (PixelType == "8U" || PixelType == "8S")
+      return 1;
+   if (PixelType == "16U" || PixelType == "16S")
+      return 2;
+   if (PixelType == "32U" || PixelType == "32S")
+      return 4;
+   dbg.Verbose(0, "gdcmHeader::GetPixelSize: Unknown pixel type");
+   return 0;
+}
+
 /**
  * \ingroup gdcmHeader
  * \brief   Build the Pixel Type of the image.
  *          Possible values are:
- *          - U8  unsigned  8 bit,
- *          - S8    signed  8 bit,
- *          - U16 unsigned 16 bit,
- *          - S16   signed 16 bit,
- *          - U32 unsigned 32 bit,
- *          - S32   signed 32 bit,
+ *          - 8U  unsigned  8 bit,
+ *          - 8S    signed  8 bit,
+ *          - 16U unsigned 16 bit,
+ *          - 16S   signed 16 bit,
+ *          - 32U unsigned 32 bit,
+ *          - 32S   signed 32 bit,
  * \warning 12 bit images appear as 16 bit.
- * @return 
+ * @return  
  */
 string gdcmHeader::GetPixelType(void) {
    string BitsAlloc;
@@ -1532,11 +1563,11 @@ void gdcmHeader::LoadElements(void) {
       }
 }
 
-void gdcmHeader::PrintPubElVal(ostream & os) {
+void gdcmHeader::PrintPubElVal(std::ostream & os) {
    PubElValSet.Print(os);
 }
 
-void gdcmHeader::PrintPubDict(ostream & os) {
+void gdcmHeader::PrintPubDict(std::ostream & os) {
    RefPubDict->Print(os);
 }