comparison Plugins/Engine/OrthancPlugins.cpp @ 1600:7151d63e6d81

documentation, primitives for jpeg
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 01 Sep 2015 12:11:53 +0200
parents dd1f9e81f891
children 905b4db3092b
comparison
equal deleted inserted replaced
1599:dd1f9e81f891 1600:7151d63e6d81
676 } 676 }
677 677
678 678
679 void OrthancPlugins::CompressAndAnswerPngImage(const void* parameters) 679 void OrthancPlugins::CompressAndAnswerPngImage(const void* parameters)
680 { 680 {
681 // Bridge for backward compatibility with Orthanc <= 0.9.3
681 const _OrthancPluginCompressAndAnswerPngImage& p = 682 const _OrthancPluginCompressAndAnswerPngImage& p =
682 *reinterpret_cast<const _OrthancPluginCompressAndAnswerPngImage*>(parameters); 683 *reinterpret_cast<const _OrthancPluginCompressAndAnswerPngImage*>(parameters);
683 684
685 _OrthancPluginCompressAndAnswerImage p2;
686 p2.output = p.output;
687 p2.imageFormat = OrthancPluginImageFormat_Png;
688 p2.pixelFormat = p.format;
689 p2.width = p.width;
690 p2.height = p.height;
691 p2.pitch = p.height;
692 p2.buffer = p.buffer;
693 p2.quality = 0;
694
695 CompressAndAnswerImage(&p2);
696 }
697
698
699 void OrthancPlugins::CompressAndAnswerImage(const void* parameters)
700 {
701 const _OrthancPluginCompressAndAnswerImage& p =
702 *reinterpret_cast<const _OrthancPluginCompressAndAnswerImage*>(parameters);
703
684 HttpOutput* translatedOutput = reinterpret_cast<HttpOutput*>(p.output); 704 HttpOutput* translatedOutput = reinterpret_cast<HttpOutput*>(p.output);
685 705
686 PixelFormat format; 706 ImageAccessor accessor;
687 switch (p.format) 707 accessor.AssignReadOnly(Convert(p.pixelFormat), p.width, p.height, p.pitch, p.buffer);
688 { 708
689 case OrthancPluginPixelFormat_Grayscale8: 709 std::string compressed;
690 format = PixelFormat_Grayscale8; 710
711 switch (p.imageFormat)
712 {
713 case OrthancPluginImageFormat_Png:
714 {
715 PngWriter writer;
716 writer.WriteToMemory(compressed, accessor);
717 translatedOutput->SetContentType("image/png");
691 break; 718 break;
692 719 }
693 case OrthancPluginPixelFormat_Grayscale16: 720
694 format = PixelFormat_Grayscale16; 721 case OrthancPluginImageFormat_Jpeg:
695 break; 722 {
696 723 // TODO
697 case OrthancPluginPixelFormat_SignedGrayscale16: 724 // quality
698 format = PixelFormat_SignedGrayscale16; 725 }
699 break;
700
701 case OrthancPluginPixelFormat_RGB24:
702 format = PixelFormat_RGB24;
703 break;
704
705 case OrthancPluginPixelFormat_RGBA32:
706 format = PixelFormat_RGBA32;
707 break;
708 726
709 default: 727 default:
710 throw OrthancException(ErrorCode_ParameterOutOfRange); 728 throw OrthancException(ErrorCode_ParameterOutOfRange);
711 } 729 }
712 730
713 ImageAccessor accessor; 731 translatedOutput->Answer(compressed);
714 accessor.AssignReadOnly(format, p.width, p.height, p.pitch, p.buffer);
715
716 PngWriter writer;
717 std::string png;
718 writer.WriteToMemory(png, accessor);
719
720 translatedOutput->SetContentType("image/png");
721 translatedOutput->Answer(png);
722 } 732 }
723 733
724 734
725 void OrthancPlugins::CheckContextAvailable() 735 void OrthancPlugins::CheckContextAvailable()
726 { 736 {
1159 AnswerBuffer(parameters); 1169 AnswerBuffer(parameters);
1160 return true; 1170 return true;
1161 1171
1162 case _OrthancPluginService_CompressAndAnswerPngImage: 1172 case _OrthancPluginService_CompressAndAnswerPngImage:
1163 CompressAndAnswerPngImage(parameters); 1173 CompressAndAnswerPngImage(parameters);
1174 return true;
1175
1176 case _OrthancPluginService_CompressAndAnswerImage:
1177 CompressAndAnswerImage(parameters);
1164 return true; 1178 return true;
1165 1179
1166 case _OrthancPluginService_GetDicomForInstance: 1180 case _OrthancPluginService_GetDicomForInstance:
1167 GetDicomForInstance(parameters); 1181 GetDicomForInstance(parameters);
1168 return true; 1182 return true;