comparison Framework/Outputs/DicomPyramidWriter.cpp @ 168:d3aea0af03e1

attempt to fix issue #139
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 12 Jul 2019 12:51:17 +0200
parents 605247fc8758
children de783db2a7c3
comparison
equal deleted inserted replaced
167:605247fc8758 168:d3aea0af03e1
140 { 140 {
141 writer = new MultiframeDicomWriter 141 writer = new MultiframeDicomWriter
142 (dataset_, GetImageCompression(), GetPixelFormat(), level.width_, level.height_, 142 (dataset_, GetImageCompression(), GetPixelFormat(), level.width_, level.height_,
143 GetTileWidth(), GetTileHeight(), photometric_); 143 GetTileWidth(), GetTileHeight(), photometric_);
144 writers_[z] = writer; 144 writers_[z] = writer;
145
146 #if 0
147 {
148 // Fix issue 139: The PixelSpacing information changes at each level
149 // https://bitbucket.org/sjodogne/orthanc/issues/139/orthancwsidicomizer-pixelspacing
150
151 // In the 2 lines below, remember to switch X/Y when going from physical to pixel coordinates!
152 float spacingX = volume_.GetWidth() / static_cast<float>(level.height_);
153 float spacingY = volume_.GetHeight() / static_cast<float>(level.width_);
154
155 std::string spacing = (boost::lexical_cast<std::string>(spacingX) + '\\' +
156 boost::lexical_cast<std::string>(spacingY));
157
158 std::auto_ptr<DcmItem> item(new DcmItem);
159
160 std::auto_ptr<DcmItem> item2(new DcmItem);
161 OrthancWSI::DicomToolbox::SetStringTag(*item2, DCM_SliceThickness,
162 boost::lexical_cast<std::string>(volume_.GetDepth()));
163 OrthancWSI::DicomToolbox::SetStringTag(*item2, DCM_PixelSpacing, spacing);
164
165 std::auto_ptr<DcmSequenceOfItems> sequence2(new DcmSequenceOfItems(DCM_PixelMeasuresSequence));
166 if (!sequence2->insert(item2.release(), false, false).good())
167 {
168 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
169 }
170
171 DcmSequenceOfItems* sequence = NULL;
172 if (!writer->GetSharedTags().findAndGetSequence(DCM_SharedFunctionalGroupsSequence, sequence).good() ||
173 sequence == NULL ||
174 sequence->card() != 1 ||
175 sequence->getItem(0) == NULL ||
176 !sequence->getItem(0)->insert(sequence2.release(), false, false).good())
177 {
178 // This sequence should have been created by "SetupDimension()" in Dicomizer.cpp
179 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
180 }
181 }
182 #endif
145 } 183 }
146 184
147 std::auto_ptr<DcmItem> functionalGroup(CreateFunctionalGroup(writer->GetFramesCount() + 1, 185 std::auto_ptr<DcmItem> functionalGroup(CreateFunctionalGroup(writer->GetFramesCount() + 1,
148 x * GetTileWidth(), 186 x * GetTileWidth(),
149 y * GetTileHeight(), 187 y * GetTileHeight(),