1 /*=========================================================================
2  *
3  *  Copyright Insight Software Consortium
4  *
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at
8  *
9  *         http://www.apache.org/licenses/LICENSE-2.0.txt
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  *=========================================================================*/
18 #ifndef itkCustomColormapFunction_h
19 #define itkCustomColormapFunction_h
20 
21 #include "itkColormapFunction.h"
22 
23 #include <vector>
24 
25 namespace itk
26 {
27 namespace Function
28 {
29 /**
30  * \class CustomColormapFunction
31  * \brief Function object which maps a scalar value into an RGB colormap value.
32  *
33  * \author Nicholas Tustison, Hui Zhang, Gaetan Lehmann, Paul Yushkevich
34  * and James C. Gee
35  *
36  * This code was contributed in the Insight Journal paper:
37  *
38  * "Meeting Andy Warhol Somewhere Over the Rainbow: RGB Colormapping and ITK"
39  * http://www.insight-journal.org/browse/publication/285
40  * https://hdl.handle.net/1926/1452
41  *
42  * \ingroup ITKColormap
43  */
44 template< typename TScalar, typename TRGBPixel >
45 class ITK_TEMPLATE_EXPORT CustomColormapFunction:
46   public ColormapFunction< TScalar, TRGBPixel >
47 {
48 public:
49   ITK_DISALLOW_COPY_AND_ASSIGN(CustomColormapFunction);
50 
51   using Self = CustomColormapFunction;
52   using Superclass = ColormapFunction< TScalar, TRGBPixel >;
53   using Pointer = SmartPointer< Self >;
54   using ConstPointer = SmartPointer< const Self >;
55 
56   /** Method for creation through the object factory. */
57   itkNewMacro(Self);
58 
59   using RGBPixelType = typename Superclass::RGBPixelType;
60   using ScalarType = typename Superclass::ScalarType;
61   using RealType = typename Superclass::RealType;
62 
63   using ChannelType = std::vector< RealType >;
64 
65   RGBPixelType operator()(const TScalar &) const override;
66 
SetRedChannel(ChannelType red)67   void SetRedChannel(ChannelType red)
68     {
69     m_RedChannel = red;
70     }
71 
GetRedChannel()72   ChannelType GetRedChannel() const
73     {
74     return m_RedChannel;
75     }
76 
SetGreenChannel(ChannelType green)77   void SetGreenChannel(ChannelType green)
78     {
79     m_GreenChannel = green;
80     }
81 
GetGreenChannel()82   ChannelType GetGreenChannel() const
83     {
84     return m_GreenChannel;
85     }
86 
SetBlueChannel(ChannelType blue)87   void SetBlueChannel(ChannelType blue)
88     {
89     m_BlueChannel = blue;
90     }
91 
GetBlueChannel()92   ChannelType GetBlueChannel() const
93     {
94     return m_BlueChannel;
95     }
96 
97 protected:
98   CustomColormapFunction() = default;
99   ~CustomColormapFunction() override = default;
100 
101 private:
102   ChannelType m_RedChannel;
103   ChannelType m_GreenChannel;
104   ChannelType m_BlueChannel;
105 };
106 } // end namespace Function
107 } // end namespace itk
108 
109 #ifndef ITK_MANUAL_INSTANTIATION
110 #include "itkCustomColormapFunction.hxx"
111 #endif
112 
113 #endif
114