# HG changeset patch # User Sebastien Jodogne # Date 1521126652 -3600 # Node ID d61224de488346fdb58e90533537e426f61bf20b # Parent 9523ce4f44ccae8c9b520c7a9a7894d025f17112 simplification diff -r 9523ce4f44cc -r d61224de4883 Framework/Volumes/VolumeReslicer.cpp --- a/Framework/Volumes/VolumeReslicer.cpp Thu Mar 15 15:44:41 2018 +0100 +++ b/Framework/Volumes/VolumeReslicer.cpp Thu Mar 15 16:10:52 2018 +0100 @@ -9,6 +9,7 @@ #include +#include namespace OrthancStone { @@ -23,17 +24,62 @@ }; - template class PixelShader; - template - class PixelShader + template + class PixelShader { private: + typedef SubvoxelReader VoxelReader; + typedef Orthanc::PixelTraits PixelWriter; + + VoxelReader reader_; + + public: + PixelShader(const ImageBuffer3D& image, + float /* scaling */, + float /* offset */) : + reader_(image) + { + } + + ORTHANC_FORCE_INLINE + void Apply(typename PixelWriter::PixelType* pixel, + float volumeX, + float volumeY, + float volumeZ) + { + typename VoxelReader::PixelType value; + + if (!reader_.GetValue(value, volumeX, volumeY, volumeZ)) + { + VoxelReader::Traits::SetMinValue(value); + } + + *pixel = value; + } + }; + + + template + class PixelShader + { + private: + typedef SubvoxelReader VoxelReader; + typedef Orthanc::PixelTraits PixelWriter; + VoxelReader reader_; public: @@ -62,11 +108,18 @@ }; - template - class PixelShader + template + class PixelShader { private: + typedef SubvoxelReader VoxelReader; + typedef Orthanc::PixelTraits PixelWriter; + VoxelReader reader_; float outOfVolume_; @@ -97,11 +150,18 @@ }; - template - class PixelShader + template + class PixelShader { private: + typedef SubvoxelReader VoxelReader; + typedef Orthanc::PixelTraits PixelWriter; + VoxelReader reader_; float scaling_; float offset_; @@ -267,9 +327,7 @@ float scaling, float offset) { - typedef SubvoxelReader Reader; - typedef Orthanc::PixelTraits Writer; - typedef PixelShader Shader; + typedef PixelShader Shader; const unsigned int outputWidth = slice.GetWidth(); const unsigned int outputHeight = slice.GetHeight(); @@ -282,8 +340,8 @@ for (unsigned int y = 0; y < outputHeight; y++) { - typename Writer::PixelType* p = - reinterpret_cast(slice.GetRow(y)); + typedef typename Orthanc::ImageTraits::PixelType PixelType; + PixelType* p = reinterpret_cast(slice.GetRow(y)); RowIterator it(slice, extent, plane, box, y);