# HG changeset patch # User Sebastien Jodogne # Date 1532437258 -7200 # Node ID 65699fcb4e991c92f545b57460a84595a5d5b86e # Parent 64e3d4ab158d5a10ebdb25af33210c80ec73abe0 PixelTraits diff -r 64e3d4ab158d -r 65699fcb4e99 Core/Images/ImageProcessing.cpp --- a/Core/Images/ImageProcessing.cpp Tue Jul 24 10:39:08 2018 +0200 +++ b/Core/Images/ImageProcessing.cpp Tue Jul 24 15:00:58 2018 +0200 @@ -1219,6 +1219,19 @@ break; } + case Orthanc::PixelFormat_RGBA32: + { + PixelTraits::PixelType pixel; + pixel.red_ = red; + pixel.green_ = green; + pixel.blue_ = blue; + pixel.alpha_ = alpha; + + BresenhamPixelWriter writer(image, pixel); + writer.DrawSegment(x0, y0, x1, y1); + break; + } + case Orthanc::PixelFormat_RGB24: { PixelTraits::PixelType pixel; diff -r 64e3d4ab158d -r 65699fcb4e99 Core/Images/PixelTraits.h --- a/Core/Images/PixelTraits.h Tue Jul 24 10:39:08 2018 +0200 +++ b/Core/Images/PixelTraits.h Tue Jul 24 15:00:58 2018 +0200 @@ -281,6 +281,67 @@ template <> + struct PixelTraits + { + struct PixelType + { + uint8_t red_; + uint8_t green_; + uint8_t blue_; + uint8_t alpha_; + }; + + ORTHANC_FORCE_INLINE + static PixelFormat GetPixelFormat() + { + return PixelFormat_RGBA32; + } + + ORTHANC_FORCE_INLINE + static void SetZero(PixelType& target) + { + target.red_ = 0; + target.green_ = 0; + target.blue_ = 0; + target.alpha_ = 0; + } + + ORTHANC_FORCE_INLINE + static void Copy(PixelType& target, + const PixelType& source) + { + target.red_ = source.red_; + target.green_ = source.green_; + target.blue_ = source.blue_; + target.alpha_ = source.alpha_; + } + + ORTHANC_FORCE_INLINE + static bool IsEqual(const PixelType& a, + const PixelType& b) + { + return (a.red_ == b.red_ && + a.green_ == b.green_ && + a.blue_ == b.blue_ && + a.alpha_ == b.alpha_); + } + + ORTHANC_FORCE_INLINE + static void FloatToPixel(PixelType& target, + float value) + { + uint8_t v; + PixelTraits::FloatToPixel(v, value); + + target.red_ = v; + target.green_ = v; + target.blue_ = v; + target.alpha_ = 255; + } + }; + + + template <> struct PixelTraits { typedef float PixelType;