Mercurial > hg > orthanc
comparison OrthancServer/ParsedDicomFile.cpp @ 1935:e251606c1433
FromDcmtkBridge::LoadFromMemoryBuffer
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 24 Mar 2016 11:46:41 +0100 |
parents | 72a2fd7fed8b |
children | d7b176f7dd1b |
comparison
equal
deleted
inserted
replaced
1934:72a2fd7fed8b | 1935:e251606c1433 |
---|---|
99 | 99 |
100 #include <dcmtk/dcmdata/dcchrstr.h> | 100 #include <dcmtk/dcmdata/dcchrstr.h> |
101 #include <dcmtk/dcmdata/dcdicent.h> | 101 #include <dcmtk/dcmdata/dcdicent.h> |
102 #include <dcmtk/dcmdata/dcdict.h> | 102 #include <dcmtk/dcmdata/dcdict.h> |
103 #include <dcmtk/dcmdata/dcfilefo.h> | 103 #include <dcmtk/dcmdata/dcfilefo.h> |
104 #include <dcmtk/dcmdata/dcistrmb.h> | |
105 #include <dcmtk/dcmdata/dcuid.h> | 104 #include <dcmtk/dcmdata/dcuid.h> |
106 #include <dcmtk/dcmdata/dcmetinf.h> | 105 #include <dcmtk/dcmdata/dcmetinf.h> |
107 #include <dcmtk/dcmdata/dcdeftag.h> | 106 #include <dcmtk/dcmdata/dcdeftag.h> |
108 | 107 |
109 #include <dcmtk/dcmdata/dcvrae.h> | 108 #include <dcmtk/dcmdata/dcvrae.h> |
148 std::auto_ptr<DcmFileFormat> file_; | 147 std::auto_ptr<DcmFileFormat> file_; |
149 std::auto_ptr<DicomFrameIndex> frameIndex_; | 148 std::auto_ptr<DicomFrameIndex> frameIndex_; |
150 }; | 149 }; |
151 | 150 |
152 | 151 |
153 // This method can only be called from the constructors! | |
154 void ParsedDicomFile::Setup(const void* buffer, | |
155 size_t size) | |
156 { | |
157 DcmInputBufferStream is; | |
158 if (size > 0) | |
159 { | |
160 is.setBuffer(buffer, size); | |
161 } | |
162 is.setEos(); | |
163 | |
164 pimpl_->file_.reset(new DcmFileFormat); | |
165 pimpl_->file_->transferInit(); | |
166 if (!pimpl_->file_->read(is).good()) | |
167 { | |
168 delete pimpl_; // Avoid a memory leak due to exception | |
169 // throwing, as we are in the constructor | |
170 | |
171 throw OrthancException(ErrorCode_BadFileFormat); | |
172 } | |
173 pimpl_->file_->loadAllDataIntoMemory(); | |
174 pimpl_->file_->transferEnd(); | |
175 } | |
176 | |
177 | |
178 static void SendPathValueForDictionary(RestApiOutput& output, | 152 static void SendPathValueForDictionary(RestApiOutput& output, |
179 DcmItem& dicom) | 153 DcmItem& dicom) |
180 { | 154 { |
181 Json::Value v = Json::arrayValue; | 155 Json::Value v = Json::arrayValue; |
182 | 156 |
850 | 824 |
851 | 825 |
852 ParsedDicomFile::ParsedDicomFile(const void* content, | 826 ParsedDicomFile::ParsedDicomFile(const void* content, |
853 size_t size) : pimpl_(new PImpl) | 827 size_t size) : pimpl_(new PImpl) |
854 { | 828 { |
855 Setup(content, size); | 829 pimpl_->file_.reset(FromDcmtkBridge::LoadFromMemoryBuffer(content, size)); |
856 } | 830 } |
857 | 831 |
858 ParsedDicomFile::ParsedDicomFile(const std::string& content) : pimpl_(new PImpl) | 832 ParsedDicomFile::ParsedDicomFile(const std::string& content) : pimpl_(new PImpl) |
859 { | 833 { |
860 if (content.size() == 0) | 834 if (content.size() == 0) |
861 { | 835 { |
862 Setup(NULL, 0); | 836 pimpl_->file_.reset(FromDcmtkBridge::LoadFromMemoryBuffer(NULL, 0)); |
863 } | 837 } |
864 else | 838 else |
865 { | 839 { |
866 Setup(&content[0], content.size()); | 840 pimpl_->file_.reset(FromDcmtkBridge::LoadFromMemoryBuffer(&content[0], content.size())); |
867 } | 841 } |
868 } | 842 } |
869 | 843 |
870 | 844 |
871 ParsedDicomFile::ParsedDicomFile(ParsedDicomFile& other) : | 845 ParsedDicomFile::ParsedDicomFile(ParsedDicomFile& other) : |