r2168: *** empty log message ***
[ctsim.git] / libctsim / ctndicom.cpp
index 2209fba2706e40236729782e5dfcaac15a53edad..82d35e1db7e69defbc8c766d059332b85cb35b71 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (c) 1983-2001 Kevin Rosenberg
 **
-**  $Id: ctndicom.cpp,v 1.12 2001/03/13 14:53:44 kevin Exp $
+**  $Id: ctndicom.cpp,v 1.15 2002/06/27 01:48:26 kevin Exp $
 **
 **  This program is free software; you can redistribute it and/or modify
 **  it under the terms of the GNU General Public License (version 2) as
 
 
 DicomImporter::DicomImporter (const char* const pszFile)
-  : m_pFile(NULL), m_strFilename(pszFile), m_bFail(false), m_iContents(DICOM_CONTENTS_INVALID), 
-  m_pImageFile(NULL), m_pProjections(NULL)
+  : m_strFilename(pszFile), m_bFail(false), m_iContents(DICOM_CONTENTS_INVALID), 
+    m_pImageFile(NULL), m_pProjections(NULL), m_pFile(NULL)
 {
-  unsigned long lOptions = DCM_ORDERLITTLEENDIAN;
+  unsigned long lOptions = DCM_ORDERLITTLEENDIAN | DCM_FORMATCONVERSION;
   DCM_Debug (FALSE);
-  if (DCM_OpenFile (pszFile, lOptions, &m_pFile) != DCM_NORMAL) {
-    m_bFail = true;;
-    m_strFailMessage = "Can't open file ";
-    m_strFailMessage += m_strFilename;
+
+  CONDITION cond = DCM_OpenFile (pszFile, lOptions, &m_pFile);
+  if (cond != DCM_NORMAL) {
+    m_bFail = true;
+    char textbuf [2048]; 
+    CONDITION cond2 = COND_TopCondition (&cond, textbuf, sizeof(textbuf));
+    cond2 = DCM_NORMAL; // testing
+    if (cond2 != DCM_NORMAL) {
+      m_strFailMessage = "DCM_OpenFile failure: ";
+      m_strFailMessage += m_strFilename;
+    } else
+      m_strFailMessage = textbuf;
+
     return;
   }
 
   unsigned short iNRows, iNCols, iBitsAllocated, iBitsStored, iHighBit, iPixRep;
   DCM_ELEMENT aElemRequired[] = {
-    {DCM_IMGROWS, DCM_US, "", 1, sizeof(iNRows), reinterpret_cast<char*>(&iNRows)},
-    {DCM_IMGCOLUMNS, DCM_US, "", 1, sizeof(iNCols), reinterpret_cast<char*>(&iNCols)},
-    {DCM_IMGBITSALLOCATED, DCM_US, "", 1, sizeof(iBitsAllocated), reinterpret_cast<char*>(&iBitsAllocated)},
-    {DCM_IMGBITSSTORED, DCM_US, "", 1, sizeof(iBitsStored), reinterpret_cast<char*>(&iBitsStored)},
-    {DCM_IMGHIGHBIT, DCM_US, "", 1, sizeof(iHighBit), reinterpret_cast<char*>(&iHighBit)},
-    {DCM_IMGPIXELREPRESENTATION, DCM_US, "", 1, sizeof(iPixRep), reinterpret_cast<char*>(&iPixRep)}
+    {DCM_IMGROWS, DCM_US, "", 1, sizeof(iNRows), reinterpret_cast<char*>(&iNRows),},
+    {DCM_IMGCOLUMNS, DCM_US, "", 1, sizeof(iNCols), reinterpret_cast<char*>(&iNCols),},
+    {DCM_IMGBITSALLOCATED, DCM_US, "", 1, sizeof(iBitsAllocated), reinterpret_cast<char*>(&iBitsAllocated),},
+    {DCM_IMGBITSSTORED, DCM_US, "", 1, sizeof(iBitsStored), reinterpret_cast<char*>(&iBitsStored),},
+    {DCM_IMGHIGHBIT, DCM_US, "", 1, sizeof(iHighBit), reinterpret_cast<char*>(&iHighBit),},
+    {DCM_IMGPIXELREPRESENTATION, DCM_US, "", 1, sizeof(iPixRep), reinterpret_cast<char*>(&iPixRep),},
   };
   int nElemRequired = sizeof (aElemRequired) / sizeof(DCM_ELEMENT);
 
@@ -64,7 +73,7 @@ DicomImporter::DicomImporter (const char* const pszFile)
     loadImage (iNRows, iNCols, iBitsAllocated, iBitsStored, iHighBit, iPixRep);
     return;
   }
-  unsigned long lRtnLength;
+  U32 lRtnLength;
   DCM_TAG somatomTag = DCM_MAKETAG(TAG_GROUP_SOMATOM, TAG_MEMBER_SOMATOM_DATA);
   if (DCM_GetElementSize (&m_pFile, somatomTag, &lRtnLength) == DCM_NORMAL)
     loadProjections();
@@ -74,7 +83,7 @@ void
 DicomImporter::loadImage(unsigned short iNRows, unsigned short iNCols, unsigned short iBitsAllocated, 
                          unsigned short iBitsStored, unsigned short iHighBit, unsigned short iPixRep)
 {
-  unsigned long lRtnLength;
+  U32 lRtnLength;
   unsigned short iSamplesPerPixel, iPlanarConfig;
   
   DCM_ELEMENT elemPlanarConfig = {DCM_IMGPLANARCONFIGURATION, DCM_US, "", 1, sizeof(iPlanarConfig), 
@@ -141,7 +150,7 @@ DicomImporter::loadImage(unsigned short iNRows, unsigned short iNCols, unsigned
     return;
   }
   if ((lCheckLengthInBytes < lRealLength) && (cond != DCM_GETINCOMPLETE)) {
-    m_bFail;
+    m_bFail = true;
     m_strFailMessage = "Should have gooten incomplete message reading pixel data";
     delete pRawPixels;
     return;
@@ -174,7 +183,7 @@ DicomImporter::loadImage(unsigned short iNRows, unsigned short iNCols, unsigned
 void
 DicomImporter::loadProjections()
 {
-  unsigned long lRtnLength;
+  U32 lRtnLength;
   void* ctx = NULL;
 
   unsigned short iNViews, iNDets;
@@ -191,7 +200,7 @@ DicomImporter::loadProjections()
   }
 
   DCM_TAG somatomTag = DCM_MAKETAG(TAG_GROUP_SOMATOM, TAG_MEMBER_SOMATOM_DATA);
-  DCM_ELEMENT elemProjections = {somatomTag, DCM_UNKNOWN, "", 1, 0, NULL};
+  DCM_ELEMENT elemProjections = {somatomTag, DCM_UN, "", 1, 0, NULL};
   if (DCM_GetElementSize (&m_pFile, elemProjections.tag, &lRtnLength) != DCM_NORMAL) {
     m_bFail = true;
     m_strFailMessage = "Can't find projection data";