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) :