Mercurial > hg > orthanc-wsi
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(), |