35 #ifndef ANA_COLOR_COLORTRAITS_H
36 #define ANA_COLOR_COLORTRAITS_H
52 void setup(
const T & mini,
const T & maxi );
125 template<
typename T>
inline
128 : _traitstype( pal, mini, maxi )
132 template <
typename T>
inline
135 return _traitstype.color( in );
138 template <
typename T>
inline
141 return _traitstype.neutralColor();
146 template<
typename T>
inline
148 const T &,
const T & )
152 template <
typename T>
inline
159 template <
typename T>
inline
174 template <
typename T>
inline
184 template <
typename T>
inline
188 double fval0, fval1, val =
static_cast<double>( in );
191 fval0 = scale0 * val + decal0;
192 if( fval0 > cmin0 && fval0 < cmax0 )
194 ival0 =
static_cast<int>( fval0 );
196 else if( fval0 <= cmin0 )
198 else if( fval0 >= cmax0 )
204 colors->getSizeY() == 1 )
208 fval1 = scale1 * val + decal1;
209 if( fval1 > cmin1 && fval1 < cmax1 )
211 ival1 =
static_cast<int>( fval1 );
213 else if( fval1 <= cmin1 )
215 else if( fval1 >= cmax1 )
221 return colors->at( ival0, ival1 );
224 template <
typename T>
inline
236 float fval0, fval1, val =
static_cast<float>( in.
red() );
238 fval0 = scale0 * val + decal0;
239 if( fval0 > cmin0 && fval0 < cmax0 )
241 ival0 =
static_cast<int>( fval0 );
243 else if( fval0 <= cmin0 )
245 else if( fval0 >= cmax0 )
251 colors->getSizeY() == 1 )
255 fval1 = scale1 * val + decal1;
256 if( fval1 > cmin1 && fval1 < cmax1 )
258 ival1 =
static_cast<int>( fval1 );
260 else if( fval1 <= cmin1 )
262 else if( fval1 >= cmax1 )
268 col[0] = colors->at( ival0, ival1 )[0];
270 val =
static_cast<float>( in.
green() );
272 fval0 = scale0 * val + decal0;
273 if( fval0 > cmin0 && fval0 < cmax0 )
275 ival0 =
static_cast<int>( fval0 );
277 else if( fval0 <= cmin0 )
279 else if( fval0 >= cmax0 )
285 colors->getSizeY() == 1 )
289 fval1 = scale1 * val + decal1;
290 if( fval1 > cmin1 && fval1 < cmax1 ) {
291 ival1 =
static_cast<int>( fval1 );
292 }
else if( fval1 <= cmin1 )
294 else if( fval1 >= cmax1 )
300 col[1] = colors->at( ival0, ival1 )[1];
302 val =
static_cast<float>( in.
blue() );
304 fval0 = scale0 * val + decal0;
305 if( fval0 > cmin0 && fval0 < cmax0 )
307 ival0 =
static_cast<int>( fval0 );
309 else if( fval0 <= cmin0 )
311 else if( fval0 >= cmax0 )
317 colors->getSizeY() == 1 )
321 fval1 = scale1 * val + decal1;
322 if( fval1 > cmin1 && fval1 < cmax1 ) {
323 ival1 =
static_cast<int>( fval1 );
324 }
else if( fval1 <= cmin1 )
326 else if( fval1 >= cmax1 )
332 col[2] = colors->at( ival0, ival1 )[2];
334 val =
static_cast<float>( std::sqrt( in.
red() * in.
red()
338 fval0 = scale0 * val + decal0;
339 if( fval0 > cmin0 && fval0 < cmax0 ) {
340 ival0 =
static_cast<int>( fval0 );
341 }
else if( fval0 <= cmin0 )
343 else if( fval0 >= cmax0 )
349 colors->getSizeY() == 1 )
353 fval1 = scale1 * val + decal1;
354 if( fval1 > cmin1 && fval1 < cmax1 ) {
355 ival1 =
static_cast<int>( fval1 );
356 }
else if( fval1 <= cmin1 )
358 else if( fval1 >= cmax1 )
364 col[3] = colors->at( ival0, ival1 )[3];
377 float fval0, fval1, val =
static_cast<float>( in.
red() );
379 fval0 = scale0 * val + decal0;
380 if( fval0 > cmin0 && fval0 < cmax0 )
382 ival0 =
static_cast<int>( fval0 );
384 else if( fval0 <= cmin0 )
386 else if( fval0 >= cmax0 )
392 colors->getSizeY() == 1 )
396 fval1 = scale1 * val + decal1;
397 if( fval1 > cmin1 && fval1 < cmax1 )
399 ival1 =
static_cast<int>( fval1 );
401 else if( fval1 <= cmin1 )
403 else if( fval1 >= cmax1 )
409 col[0] = colors->at( ival0, ival1 )[0];
411 val =
static_cast<float>( in.
green() );
413 fval0 = scale0 * val + decal0;
414 if( fval0 > cmin0 && fval0 < cmax0 )
416 ival0 =
static_cast<int>( fval0 );
418 else if( fval0 <= cmin0 )
420 else if( fval0 >= cmax0 )
426 colors->getSizeY() == 1 )
430 fval1 = scale1 * val + decal1;
431 if( fval1 > cmin1 && fval1 < cmax1 )
433 ival1 =
static_cast<int>( fval1 );
435 else if( fval1 <= cmin1 )
437 else if( fval1 >= cmax1 )
443 col[1] = colors->at( ival0, ival1 )[1];
445 val =
static_cast<float>( in.
blue() );
447 fval0 = scale0 * val + decal0;
448 if( fval0 > cmin0 && fval0 < cmax0 )
450 ival0 =
static_cast<int>( fval0 );
452 else if( fval0 <= cmin0 )
454 else if( fval0 >= cmax0 )
460 colors->getSizeY() == 1 )
464 fval1 = scale1 * val + decal1;
465 if( fval1 > cmin1 && fval1 < cmax1 )
467 ival1 =
static_cast<int>( fval1 );
469 else if( fval1 <= cmin1 )
471 else if( fval1 >= cmax1 )
477 col[2] = colors->at( ival0, ival1 )[2];
479 val =
static_cast<float>( in.
alpha() );
481 fval0 = scale0 * val + decal0;
482 if( fval0 > cmin0 && fval0 < cmax0 )
484 ival0 =
static_cast<int>( fval0 );
486 else if( fval0 <= cmin0 )
488 else if( fval0 >= cmax0 )
494 colors->getSizeY() == 1 )
498 fval1 = scale1 * val + decal1;
499 if( fval1 > cmin1 && fval1 < cmax1 )
501 ival1 =
static_cast<int>( fval1 );
503 else if( fval1 <= cmin1 )
505 else if( fval1 >= cmax1 )
511 col[3] = colors->at( ival0, ival1 )[3];
AimsRGBA color(const T &) const
ColorNoPaletteTraits(const AObjectPalette *, const T &mini, const T &maxi)
void setup(const T &mini, const T &maxi)
AimsRGBA color(const T &) const
ColorScalarPaletteTraits(const AObjectPalette *pal, const T &mini, const T &maxi)
Converter value -> RGBA (high-level)
T neutralColor() const
returns a black / transparent / zero color
ColorTraits(const AObjectPalette *, const T &mini, const T &maxi)
AimsRGBA color(const T &) const
const uint8_t & green() const
const uint8_t & blue() const
const uint8_t & alpha() const
const uint8_t & red() const
const uint8_t & red() const
const uint8_t & blue() const
const uint8_t & green() const
switch to the right color traits type
ColorScalarPaletteTraits< T > traitstype