X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=libctsim%2Fctndicom.cpp;h=82d35e1db7e69defbc8c766d059332b85cb35b71;hb=8e3ba3d86e5b1293140adab70ecc0b6a20e2f651;hp=50d3a7dd6ffd843ec56e052c734e41a943f3bc5a;hpb=0f6257b32b46276415f1c6597fc1d992c3787071;p=ctsim.git diff --git a/libctsim/ctndicom.cpp b/libctsim/ctndicom.cpp index 50d3a7d..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.11 2001/03/13 10:35:06 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"; @@ -319,11 +328,11 @@ DicomExporter::createDicomObject() char szIDImageType[] = "ORIGINAL"; char szIDManufacturerModel[65] = ""; - std::ostringstream osComments; - m_pImageFile->printLabelsBrief (osComments); - size_t sizeIDComments = osComments.str().length(); - char* pszIDComments = new char [sizeIDComments+1]; - strncpy (pszIDComments, osComments.str().c_str(), sizeIDComments); + std::ostringstream osPatComments; + m_pImageFile->printLabelsBrief (osPatComments); + size_t sizePatComments = osPatComments.str().length(); + char* pszPatComments = new char [sizePatComments+1]; + strncpy (pszPatComments, osPatComments.str().c_str(), sizePatComments); snprintf (szIDSOPInstanceUID, sizeof(szIDSOPInstanceUID), "%s.2.1.6.1", szCTSimRoot); snprintf (szRelStudyInstanceUID, sizeof(szRelStudyInstanceUID), "%s.2.1.6.1.1", szCTSimRoot); @@ -384,7 +393,7 @@ DicomExporter::createDicomObject() {DCM_IDMODALITY, DCM_CS, "", 1, strlen(szModality), szModality}, {DCM_IDSOPCLASSUID, DCM_UI, "", 1, strlen(szSOPClassUID), szSOPClassUID}, {DCM_IDMANUFACTURERMODEL, DCM_LO, "", 1, strlen(szIDManufacturerModel), szIDManufacturerModel}, - {DCM_PATCOMMENTS, DCM_LT, "", 1, strlen(pszIDComments), pszIDComments}, + {DCM_PATCOMMENTS, DCM_LT, "", 1, strlen(pszPatComments), pszPatComments}, }; int nElemRequired = sizeof (aElemRequired) / sizeof(DCM_ELEMENT); @@ -411,7 +420,7 @@ DicomExporter::createDicomObject() cond = DCM_ModifyElements (&m_pObject, &elemPixelData, 1, NULL, 0, &iUpdateCount); delete pRawPixels; - delete pszIDComments; + delete pszPatComments; if (cond != DCM_NORMAL || iUpdateCount != 1) { m_bFail = true;