18 #include <dcmtk/dcmdata/dcfilefo.h>
19 #include <dcmtk/dcmdata/dcdeftag.h>
29 inline bool loadDcmtkFile(
const std::string& fName, DcmFileFormat& dcmfile, std::string* errVal)
31 OFCondition cond = dcmfile.loadFile(fName.c_str());
33 if (errVal) { *errVal = std::string(
"loadDcmFile:") + std::string(cond.text()); }
36 cond = dcmfile.loadAllDataIntoMemory();
38 if (errVal) { *errVal = std::string(
"loadDcmFile:") + std::string(cond.text()); }
49 DcmDataset *dataset = dcmfile.getDataset();
51 OFCondition cond = dataset->findAndGetOFString(DCM_Modality, modality);
53 if (errVal){ *errVal = std::string(
"getModality:") + std::string(cond.text()); }
65 template <
typename DCMObjType>
66 OFCondition
read(DCMObjType &dcmObj, DcmItem &item)
68 return dcmObj->read(item);
96 template <
typename DCMObjType,
typename DCMObjBoostPtrType,
class DCMReaderFunctor=DefaultDcmtkReaderFunctor>
99 const std::string &modalityStr,
100 const std::string &typeStr,
101 DCMReaderFunctor *readerFunctor=NULL)
104 if (modality.compare(modalityStr.c_str()) == 0) {
105 DcmDataset *dataset = dcmFile.getDataset();
106 DcmItem &item =
dynamic_cast<DcmItem&
>(*dataset);
107 DCMObjBoostPtrType dcmObj = DCMObjBoostPtrType(
new DCMObjType());
108 DCMReaderFunctor reader;
109 OFCondition cond = readerFunctor ? readerFunctor->read(dcmObj, item) : reader.read(dcmObj, item);
111 if (errVal) { *errVal = std::string(
"get") + typeStr +
": " + std::string(cond.text()); }
116 if (errVal) { *errVal = std::string(
"get") + typeStr +
": Data set contains no " + typeStr +
" object"; }
118 return DCMObjBoostPtrType();
147 template <
typename DCMObjType,
typename DCMObjBoostPtrType,
class DCMReaderFunctor=DefaultDcmtkReaderFunctor>
151 const std::string &modalityStr,
152 const std::string &typeStr,
153 DCMReaderFunctor *readerFunctor=NULL)
165 if (dcmFilePtr && !(*dcmFilePtr)) {
168 success = (*dcmFilePtr != NULL);
172 DcmFileFormat dcmfile;
175 success &=
loadDcmtkFile(fName, dcmFilePtr ? **dcmFilePtr : dcmfile, errVal);
180 return getDCMTKObjFromFile<DCMObjType, DCMObjBoostPtrType, DCMReaderFunctor>(dcmFilePtr ? **dcmFilePtr : dcmfile,
188 return DCMObjBoostPtrType();
Project global and OS specific declarations.
DCMObjBoostPtrType getDCMTKObjFromFile(DcmFileFormat &dcmFile, std::string *errVal, const std::string &modalityStr, const std::string &typeStr, DCMReaderFunctor *readerFunctor=NULL)
A template for loading a dcmtk object by a file object.
OFString getDcmtkModality(DcmFileFormat &dcmfile, std::string *errVal)
Return the modality of a given DcmFileFormat.
bool loadDcmtkFile(const std::string &fName, DcmFileFormat &dcmfile, std::string *errVal)
Load a DICOM file into the dcmtk DcmFileFormat object.
DCMObjBoostPtrType getDCMTKObjFromString(const std::string &fName, std::string *errVal, DcmFileFormatPtr *dcmFilePtr, const std::string &modalityStr, const std::string &typeStr, DCMReaderFunctor *readerFunctor=NULL)
A template for loading a dcmtk object by a file name.
Default class providing the read function for getDCMTKObjFromFile which needs the option to extent it...
OFCondition read(DCMObjType &dcmObj, DcmItem &item)
Returns the result after reading item from dcmObj.