X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=libctsim%2Fctndicom.cpp;h=82d35e1db7e69defbc8c766d059332b85cb35b71;hb=8e3ba3d86e5b1293140adab70ecc0b6a20e2f651;hp=2209fba2706e40236729782e5dfcaac15a53edad;hpb=663448e3173a19f054952806d8f8eca2fe59ec90;p=ctsim.git diff --git a/libctsim/ctndicom.cpp b/libctsim/ctndicom.cpp index 2209fba..82d35e1 100644 --- a/libctsim/ctndicom.cpp +++ b/libctsim/ctndicom.cpp @@ -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 @@ -37,26 +37,35 @@ 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(&iNRows)}, - {DCM_IMGCOLUMNS, DCM_US, "", 1, sizeof(iNCols), reinterpret_cast(&iNCols)}, - {DCM_IMGBITSALLOCATED, DCM_US, "", 1, sizeof(iBitsAllocated), reinterpret_cast(&iBitsAllocated)}, - {DCM_IMGBITSSTORED, DCM_US, "", 1, sizeof(iBitsStored), reinterpret_cast(&iBitsStored)}, - {DCM_IMGHIGHBIT, DCM_US, "", 1, sizeof(iHighBit), reinterpret_cast(&iHighBit)}, - {DCM_IMGPIXELREPRESENTATION, DCM_US, "", 1, sizeof(iPixRep), reinterpret_cast(&iPixRep)} + {DCM_IMGROWS, DCM_US, "", 1, sizeof(iNRows), reinterpret_cast(&iNRows),}, + {DCM_IMGCOLUMNS, DCM_US, "", 1, sizeof(iNCols), reinterpret_cast(&iNCols),}, + {DCM_IMGBITSALLOCATED, DCM_US, "", 1, sizeof(iBitsAllocated), reinterpret_cast(&iBitsAllocated),}, + {DCM_IMGBITSSTORED, DCM_US, "", 1, sizeof(iBitsStored), reinterpret_cast(&iBitsStored),}, + {DCM_IMGHIGHBIT, DCM_US, "", 1, sizeof(iHighBit), reinterpret_cast(&iHighBit),}, + {DCM_IMGPIXELREPRESENTATION, DCM_US, "", 1, sizeof(iPixRep), reinterpret_cast(&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";