diff --git a/src/osgPlugins/dicom/ReaderWriterDICOM.cpp b/src/osgPlugins/dicom/ReaderWriterDICOM.cpp index 387f9063e..a9627afa9 100644 --- a/src/osgPlugins/dicom/ReaderWriterDICOM.cpp +++ b/src/osgPlugins/dicom/ReaderWriterDICOM.cpp @@ -296,6 +296,7 @@ class ReaderWriterDICOM : public osgDB::ReaderWriter GLenum pixelFormat = 0; GLenum dataType = 0; unsigned int pixelSize = 0; + bool invertOrigiantion = true; for(Files::iterator itr = files.begin(); itr != files.end(); @@ -336,6 +337,35 @@ class ReaderWriterDICOM : public osgDB::ReaderWriter (*matrix)(2,2) = sliceThickness; } + double imagePositionPatient[3] = {0}; + + // patient position + for(int i=0; i<3; ++i) + { + if (fileformat.getDataset()->findAndGetFloat64(DCM_ImagePositionPatient, imagePositionPatient[i],i).good()) + { + osg::notify(osg::NOTICE)<<"Read DCM_ImagePositionPatient["<findAndGetFloat64(DCM_ImageOrientationPatient, imageOrientationPatient[i],i).good()) + { + osg::notify(osg::NOTICE)<<"Read imageOrientationPatient["<getWidth() = "<getWidth()<getHeight() = "<getHeight()<(dcmImage->getFrameCount())); unsigned int numPixels = dcmImage->getWidth() * dcmImage->getHeight() * numFramesToCopy; unsigned int dataSize = numPixels * pixelSize; - memcpy(image->data(0,0,imageNum), pixelData->getData(), dataSize); + + if (invertOrigiantion) + { + memcpy(image->data(0,0,image->r()-imageNum-1), pixelData->getData(), dataSize); + } + else + { + memcpy(image->data(0,0,imageNum), pixelData->getData(), dataSize); + } imageNum += numFramesToCopy; }