Mercurial > hg > orthanc-dicomweb
changeset 82:0c77a566277d
bootstrapping RetrieveFrames
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 08 Dec 2015 18:28:39 +0100 |
parents | e7b1d5bca3ff |
children | eab1a2859fa2 |
files | Plugin/Dicom.h Plugin/Plugin.cpp Plugin/WadoRs.cpp Plugin/WadoRs.h |
diffstat | 4 files changed, 85 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/Plugin/Dicom.h Tue Dec 08 17:25:03 2015 +0100 +++ b/Plugin/Dicom.h Tue Dec 08 18:28:39 2015 +0100 @@ -60,6 +60,11 @@ Setup(dicom); } + gdcm::File& GetFile() + { + return reader_.GetFile(); + } + const gdcm::File& GetFile() const { return reader_.GetFile();
--- a/Plugin/Plugin.cpp Tue Dec 08 17:25:03 2015 +0100 +++ b/Plugin/Plugin.cpp Tue Dec 08 18:28:39 2015 +0100 @@ -165,6 +165,7 @@ Register(root, "studies/([^/]*)/series/([^/]*)/instances/([^/]*)/bulk/(.*)", RetrieveBulkData); Register(root, "studies/([^/]*)/series/([^/]*)/instances/([^/]*)/metadata", RetrieveInstanceMetadata); Register(root, "studies/([^/]*)/series/([^/]*)/metadata", RetrieveSeriesMetadata); + Register(root, "studies/([^/]*)/series/([^/]*)/instances/([^/]*)/frames/([^/]*)", RetrieveFrames); } else {
--- a/Plugin/WadoRs.cpp Tue Dec 08 17:25:03 2015 +0100 +++ b/Plugin/WadoRs.cpp Tue Dec 08 18:28:39 2015 +0100 @@ -712,3 +712,78 @@ return OrthancPluginErrorCode_Plugin; } } + + + + + +#include <gdcmImageReader.h> +#include <gdcmImageWriter.h> +#include <gdcmImageChangeTransferSyntax.h> +#include <gdcmJPEG2000Codec.h> + + +OrthancPluginErrorCode RetrieveFrames(OrthancPluginRestOutput* output, + const char* url, + const OrthancPluginHttpRequest* request) +{ + // curl http://localhost:8042/dicom-web/studies/1.3.51.0.1.1.192.168.29.133.1681753.1681732/series/1.3.12.2.1107.5.2.33.37097.2012041612474981424569674.0.0.0/instances/1.3.12.2.1107.5.2.33.37097.2012041612485517294169680/frames/0 + + // http://gdcm.sourceforge.net/html/CompressLossyJPEG_8cs-example.html + + try + { + std::string uri, content; + if (LocateInstance(output, uri, request) && + OrthancPlugins::RestApiGetString(content, context_, uri + "/file")) + { + //OrthancPlugins::ParsedDicomFile dicom(content); + { + FILE* fp = fopen("/tmp/toto.dcm", "wb"); + fwrite(content.c_str(), content.size(), 1, fp); + fclose(fp); + } + + printf("RetrieveFrames: [%s] [%s]\n", uri.c_str(), request->groups[3]); + + gdcm::ImageChangeTransferSyntax change; + change.SetTransferSyntax(gdcm::TransferSyntax::JPEG2000Lossless); + + gdcm::JPEG2000Codec codec; + if (!codec.CanCode(change.GetTransferSyntax())) + { + return OrthancPluginErrorCode_Plugin; + } + + //codec.SetLossless(true); + change.SetUserCodec(&codec); + + gdcm::ImageReader reader; + //reader.SetFile(dicom.GetFile()); + reader.SetFileName("/tmp/toto.dcm"); + printf("Read: %d\n", reader.Read()); + + change.SetInput(reader.GetImage()); + printf("Change: %d\n", change.Change()); + + gdcm::ImageWriter writer; + writer.SetImage(change.GetOutput()); + writer.SetFile(reader.GetFile()); + + writer.SetFileName("/tmp/tutu.dcm"); + printf("Write: %d\n", writer.Write()); + } + + return OrthancPluginErrorCode_Success; + } + catch (Orthanc::OrthancException& e) + { + OrthancPluginLogError(context_, e.What()); + return OrthancPluginErrorCode_Plugin; + } + catch (std::runtime_error& e) + { + OrthancPluginLogError(context_, e.what()); + return OrthancPluginErrorCode_Plugin; + } +}
--- a/Plugin/WadoRs.h Tue Dec 08 17:25:03 2015 +0100 +++ b/Plugin/WadoRs.h Tue Dec 08 18:28:39 2015 +0100 @@ -50,3 +50,7 @@ OrthancPluginErrorCode RetrieveBulkData(OrthancPluginRestOutput* output, const char* url, const OrthancPluginHttpRequest* request); + +OrthancPluginErrorCode RetrieveFrames(OrthancPluginRestOutput* output, + const char* url, + const OrthancPluginHttpRequest* request);