Mercurial > hg > orthanc
diff Plugins/Engine/OrthancPlugins.cpp @ 1827:4b6673e828f4
"OrthancPluginCreateImage()" and "OrthancPluginCreateImageAccessor()" to create images
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 25 Nov 2015 16:39:03 +0100 |
parents | ac5b0b4e2434 |
children | a71d74987090 |
line wrap: on
line diff
--- a/Plugins/Engine/OrthancPlugins.cpp Wed Nov 25 16:00:57 2015 +0100 +++ b/Plugins/Engine/OrthancPlugins.cpp Wed Nov 25 16:39:03 2015 +0100 @@ -430,7 +430,7 @@ sizeof(int32_t) != sizeof(OrthancPluginValueRepresentation) || sizeof(int32_t) != sizeof(OrthancPluginDicomToJsonFlags) || sizeof(int32_t) != sizeof(OrthancPluginDicomToJsonFormat) || - sizeof(int32_t) != sizeof(OrthancPluginDicomFromJsonFlags) || + sizeof(int32_t) != sizeof(OrthancPluginCreateDicomFlags) || sizeof(int32_t) != sizeof(_OrthancPluginDatabaseAnswerType) || sizeof(int32_t) != sizeof(OrthancPluginIdentifierConstraint) || sizeof(int32_t) != sizeof(OrthancPluginInstanceOrigin) || @@ -440,8 +440,8 @@ static_cast<int>(OrthancPluginDicomToJsonFlags_IncludePixelData) != static_cast<int>(DicomToJsonFlags_IncludePixelData) || static_cast<int>(OrthancPluginDicomToJsonFlags_ConvertBinaryToNull) != static_cast<int>(DicomToJsonFlags_ConvertBinaryToNull) || static_cast<int>(OrthancPluginDicomToJsonFlags_ConvertBinaryToAscii) != static_cast<int>(DicomToJsonFlags_ConvertBinaryToAscii) || - static_cast<int>(OrthancPluginDicomFromJsonFlags_DecodeDataUriScheme) != static_cast<int>(DicomFromJsonFlags_DecodeDataUriScheme) || - static_cast<int>(OrthancPluginDicomFromJsonFlags_GenerateIdentifiers) != static_cast<int>(DicomFromJsonFlags_GenerateIdentifiers)) + static_cast<int>(OrthancPluginCreateDicomFlags_DecodeDataUriScheme) != static_cast<int>(DicomFromJsonFlags_DecodeDataUriScheme) || + static_cast<int>(OrthancPluginCreateDicomFlags_GenerateIdentifiers) != static_cast<int>(DicomFromJsonFlags_GenerateIdentifiers)) { throw OrthancException(ErrorCode_Plugin); @@ -1449,11 +1449,11 @@ } - void OrthancPlugins::ApplyDicomFromJson(_OrthancPluginService service, - const void* parameters) + void OrthancPlugins::ApplyCreateDicom(_OrthancPluginService service, + const void* parameters) { - const _OrthancPluginDicomFromJson& p = - *reinterpret_cast<const _OrthancPluginDicomFromJson*>(parameters); + const _OrthancPluginCreateDicom& p = + *reinterpret_cast<const _OrthancPluginCreateDicom*>(parameters); Json::Value json; Json::Reader reader; @@ -1467,11 +1467,39 @@ { std::auto_ptr<ParsedDicomFile> file (ParsedDicomFile::CreateFromJson(json, static_cast<DicomFromJsonFlags>(p.flags))); + + if (p.pixelData) + { + file->EmbedImage(*reinterpret_cast<const ImageAccessor*>(p.pixelData)); + } + file->SaveToMemoryBuffer(dicom); } CopyToMemoryBuffer(*p.target, dicom); } + + + void OrthancPlugins::ApplyCreateImage(_OrthancPluginService service, + const void* parameters) + { + const _OrthancPluginCreateImage& p = + *reinterpret_cast<const _OrthancPluginCreateImage*>(parameters); + + std::auto_ptr<ImageAccessor> result; + + if (service == _OrthancPluginService_CreateImage) + { + result.reset(new Image(Plugins::Convert(p.format), p.width, p.height)); + } + else + { + result.reset(new ImageAccessor); + result->AssignWritable(Plugins::Convert(p.format), p.width, p.height, p.pitch, p.buffer); + } + + *(p.target) = reinterpret_cast<OrthancPluginImage*>(result.release()); + } void OrthancPlugins::DatabaseAnswer(const void* parameters) @@ -2003,8 +2031,8 @@ ApplyDicomToJson(service, parameters); return true; - case _OrthancPluginService_DicomFromJson: - ApplyDicomFromJson(service, parameters); + case _OrthancPluginService_CreateDicom: + ApplyCreateDicom(service, parameters); return true; case _OrthancPluginService_WorklistAddAnswer: @@ -2039,6 +2067,11 @@ return true; } + case _OrthancPluginService_CreateImage: + case _OrthancPluginService_CreateImageAccessor: + ApplyCreateImage(service, parameters); + return true; + default: { // This service is unknown to the Orthanc plugin engine