I tried to read an RT image using DRTImage::read(DcmItem *dataset). However, this fails even though I am fairly confident that the data is valid.
Looking at the code, I noticed that DRTImage::read() appears to call DRTImageIOD::read() with the argument *format_.getDataset() although format_ hasn't been set.
Code: Select all
OFCondition DRTImage::read(DcmItem *dataset)
{
/* get rid of the old image before we mess with its dataset */
reset();
dataset_ = dataset;
OFCondition cond = DRTImageIOD::read(*format_.getDataset());
if (cond.good())
{
image_ = new DicomImage(&format_,
EXS_Unknown, CIF_MayDetachPixelData);
}
else
clear();
return cond;
}
Stepping through the code in the debuger I noticed that DRTImage::read first sets the member dataset_ to dataset before calling DRTImageIOD::read, which in turn calls clear(). This method is overriden in DRTImage
Code: Select all
void DRTImage::clear()
{
reset();
DRTImageIOD::clear();
}
Code: Select all
void DRTImage::reset()
{
delete image_;
delete dataset_;
format_.clear();
image_ = NULL;
dataset_ = NULL;
}
I suggest to move the assignemt of dataset_ after the call to read, i.e.
Code: Select all
OFCondition DRTImage::read(DcmItem *dataset)
{
/* get rid of the old image before we mess with its dataset */
reset();
//dataset_ = dataset;
OFCondition cond = DRTImageIOD::read(*dataset);
if (cond.good())
{
dataset_ = dataset;
image_ = new DicomImage(dataset,
EXS_Unknown, CIF_MayDetachPixelData);
}
else
clear();
return cond;
}