29 #include "../raster.h"
30 #include "../raster/RasterProperty.h"
31 #include "../se/RasterSymbolizer.h"
34 #include <boost/math/special_functions/fpclassify.hpp>
60 m_categorizeMap.clear();
61 m_interpolateMap.clear();
68 m_rgbMap[RED_CHANNEL] = -1;
69 m_rgbMap[GREEN_CHANNEL] = -1;
70 m_rgbMap[BLUE_CHANNEL] = -1;
72 std::map<RGBChannels,short>::iterator it = m_rgbMap.begin();
73 while (it != m_rgbMap.end())
75 if (it->first == RED_CHANNEL)
76 m_rgbMap[RED_CHANNEL] = it->second;
78 else if (it->first == GREEN_CHANNEL)
79 m_rgbMap[GREEN_CHANNEL] = it->second;
81 else if (it->first == BLUE_CHANNEL)
82 m_rgbMap[BLUE_CHANNEL] = it->second;
100 m_gain = (double)(rmax-rmin)/(vmax-vmin);
102 if(boost::math::isnan(m_gain) || boost::math::isinf(m_gain))
109 m_offset = -1*m_gain*vmin+rmin;
114 if (m_transfFuncPtr == 0 || m_RGBAFuncPtr)
121 return MONO2THREE_TRANSF;
126 return EXTRACT2RGB_TRANSF;
131 return RED2THREE_TRANSF;
136 return GREEN2THREE_TRANSF;
141 return BLUE2THREE_TRANSF;
146 return CATEGORIZE_TRANSF;
151 return INTERPOLATE_TRANSF;
155 return BAND2BAND_TRANSF;
165 if (func == MONO2THREE_TRANSF)
170 else if (func == EXTRACT2RGB_TRANSF)
175 else if (func == RED2THREE_TRANSF)
180 else if (func == GREEN2THREE_TRANSF)
185 else if (func == BLUE2THREE_TRANSF)
190 else if (func == CATEGORIZE_TRANSF)
195 else if (func == INTERPOLATE_TRANSF)
200 else if (func == BAND2BAND_TRANSF)
205 else if (func == EXTRACT2RGBA_TRANSF)
221 m_rasterIn->getValue((
int)icol, (
int)ilin, val, m_monoBand);
223 if(checkNoValue(val, m_monoBand) ==
false)
225 val = (val * m_gain + m_offset) * m_mContrast;
229 std::vector<double> vecValues;
230 vecValues.resize(3, val);
232 m_rasterOut->setValues((
int)ocol, (
int)olin, vecValues);
240 m_rasterIn->getValue((
int)icol, (
int)ilin, val, m_monoBand);
242 if(checkNoValue(val, m_monoBand) ==
false)
244 val = (val * m_gain + m_offset) * m_mContrast;
248 te::color::RGBAColor c(static_cast<int>(val), static_cast<int>(val), static_cast<int>(val), static_cast<int>(m_transp));
258 double valR, valG, valB;
260 m_rasterIn->getValue((
int)icol, (
int)ilin, valR, m_rgbMap[RED_CHANNEL]);
261 m_rasterIn->getValue((
int)icol, (
int)ilin, valG, m_rgbMap[GREEN_CHANNEL]);
262 m_rasterIn->getValue((
int)icol, (
int)ilin, valB, m_rgbMap[BLUE_CHANNEL]);
264 if(checkNoValue(valR, m_rgbMap[RED_CHANNEL]) ==
false ||
265 checkNoValue(valG, m_rgbMap[GREEN_CHANNEL]) ==
false ||
266 checkNoValue(valB, m_rgbMap[BLUE_CHANNEL]) ==
false)
268 std::vector<double> vecValues;
270 valR = (valR * m_gain + m_offset) * m_rContrast;
272 vecValues.push_back(valR);
274 valG = (valG * m_gain + m_offset) * m_gContrast;
276 vecValues.push_back(valG);
278 valB = (valB * m_gain + m_offset) * m_bContrast;
280 vecValues.push_back(valB);
282 m_rasterOut->setValues((
int)ocol, (
int)olin, vecValues);
288 double valR, valG, valB;
290 m_rasterIn->getValue((
int)icol, (
int)ilin, valR, m_rgbMap[RED_CHANNEL]);
291 m_rasterIn->getValue((
int)icol, (
int)ilin, valG, m_rgbMap[GREEN_CHANNEL]);
292 m_rasterIn->getValue((
int)icol, (
int)ilin, valB, m_rgbMap[BLUE_CHANNEL]);
294 if(checkNoValue(valR, m_rgbMap[RED_CHANNEL]) ==
false ||
295 checkNoValue(valG, m_rgbMap[GREEN_CHANNEL]) ==
false ||
296 checkNoValue(valB, m_rgbMap[BLUE_CHANNEL]) ==
false)
298 valR = (valR * m_gain + m_offset) * m_rContrast;
301 valG = (valG * m_gain + m_offset) * m_gContrast;
304 valB = (valB * m_gain + m_offset) * m_bContrast;
307 te::color::RGBAColor c(static_cast<int>(valR), static_cast<int>(valG), static_cast<int>(valB), static_cast<int>(m_transp));
317 double valR, valG, valB, valA;
319 m_rasterIn->getValue((
int)icol, (
int)ilin, valR, m_rgbMap[RED_CHANNEL]);
320 m_rasterIn->getValue((
int)icol, (
int)ilin, valG, m_rgbMap[GREEN_CHANNEL]);
321 m_rasterIn->getValue((
int)icol, (
int)ilin, valB, m_rgbMap[BLUE_CHANNEL]);
322 m_rasterIn->getValue((
int)icol, (
int)ilin, valA, m_rgbMap[ALPHA_CHANNEL]);
324 if(checkNoValue(valR, m_rgbMap[RED_CHANNEL]) ==
false ||
325 checkNoValue(valG, m_rgbMap[GREEN_CHANNEL]) ==
false ||
326 checkNoValue(valB, m_rgbMap[BLUE_CHANNEL]) ==
false ||
327 checkNoValue(valA, m_rgbMap[ALPHA_CHANNEL]) ==
false)
329 std::vector<double> vecValues;
331 valR = (valR * m_gain + m_offset) * m_rContrast;
333 vecValues.push_back(valR);
335 valG = (valG * m_gain + m_offset) * m_gContrast;
337 vecValues.push_back(valG);
339 valB = (valB * m_gain + m_offset) * m_bContrast;
341 vecValues.push_back(valB);
344 vecValues.push_back(valB);
346 m_rasterOut->setValues((
int)ocol, (
int)olin, vecValues);
352 double valR, valG, valB, valA;
354 m_rasterIn->getValue((
int)icol, (
int)ilin, valR, m_rgbMap[RED_CHANNEL]);
355 m_rasterIn->getValue((
int)icol, (
int)ilin, valG, m_rgbMap[GREEN_CHANNEL]);
356 m_rasterIn->getValue((
int)icol, (
int)ilin, valB, m_rgbMap[BLUE_CHANNEL]);
357 m_rasterIn->getValue((
int)icol, (
int)ilin, valA, m_rgbMap[ALPHA_CHANNEL]);
359 if(checkNoValue(valR, m_rgbMap[RED_CHANNEL]) ==
false ||
360 checkNoValue(valG, m_rgbMap[GREEN_CHANNEL]) ==
false ||
361 checkNoValue(valB, m_rgbMap[BLUE_CHANNEL]) ==
false ||
362 checkNoValue(valA, m_rgbMap[ALPHA_CHANNEL]) ==
false)
364 valR = (valR * m_gain + m_offset) * m_rContrast;
367 valG = (valG * m_gain + m_offset) * m_gContrast;
370 valB = (valB * m_gain + m_offset) * m_bContrast;
376 return te::color::RGBAColor(static_cast<int>(valR), static_cast<int>(valG), static_cast<int>(valB), static_cast<int>(valA));
378 return te::color::RGBAColor(static_cast<int>(valR), static_cast<int>(valG), static_cast<int>(valB), static_cast<int>(m_transp));
388 m_rasterIn->getValue((
int)icol, (
int)ilin, val, m_rgbMap[RED_CHANNEL]);
390 if(checkNoValue(val, m_rgbMap[RED_CHANNEL]) ==
false)
392 val = (val * m_gain + m_offset) * m_rContrast;
396 std::vector<double> vecValues;
397 vecValues.push_back(val);
398 vecValues.push_back(0.);
399 vecValues.push_back(0.);
401 m_rasterOut->setValues((
int)ocol, (
int)olin, vecValues);
409 m_rasterIn->getValue((
int)icol, (
int)ilin, val, m_rgbMap[RED_CHANNEL]);
411 if(checkNoValue(val, m_rgbMap[RED_CHANNEL]) ==
false)
413 val = (val * m_gain + m_offset) * m_rContrast;
417 te::color::RGBAColor c(static_cast<int>(val), static_cast<int>(0.), static_cast<int>(0.), static_cast<int>(m_transp));
430 m_rasterIn->getValue((
int)icol, (
int)ilin, val, m_rgbMap[GREEN_CHANNEL]);
432 if(checkNoValue(val, m_rgbMap[GREEN_CHANNEL]) ==
false)
434 val = (val * m_gain + m_offset) * m_gContrast;
438 std::vector<double> vecValues;
439 vecValues.push_back(0.);
440 vecValues.push_back(val);
441 vecValues.push_back(0.);
443 m_rasterOut->setValues((
int)ocol, (
int)olin, vecValues);
451 m_rasterIn->getValue((
int)icol, (
int)ilin, val, m_rgbMap[GREEN_CHANNEL]);
453 if(checkNoValue(val, m_rgbMap[GREEN_CHANNEL]) ==
false)
455 val = (val * m_gain + m_offset) * m_gContrast;
459 te::color::RGBAColor c(static_cast<int>(0.), static_cast<int>(val), static_cast<int>(0.), static_cast<int>(m_transp));
472 m_rasterIn->getValue((
int)icol, (
int)ilin, val, m_rgbMap[BLUE_CHANNEL]);
474 if(checkNoValue(val, m_rgbMap[BLUE_CHANNEL]) ==
false)
476 val = (val * m_gain + m_offset) * m_bContrast;
480 std::vector<double> vecValues;
481 vecValues.push_back(0.);
482 vecValues.push_back(0.);
483 vecValues.push_back(val);
485 m_rasterOut->setValues((
int)ocol, (
int)olin, vecValues);
493 m_rasterIn->getValue((
int)icol, (
int)ilin, val, m_rgbMap[BLUE_CHANNEL]);
495 if(checkNoValue(val, m_rgbMap[BLUE_CHANNEL]) ==
false)
497 val = (val * m_gain + m_offset) * m_bContrast;
501 te::color::RGBAColor c(static_cast<int>(0.), static_cast<int>(0.), static_cast<int>(val), static_cast<int>(m_transp));
514 m_rasterIn->getValue((
int)icol, (
int)ilin, val, m_monoBand);
518 std::vector<double> vecValues;
519 vecValues.push_back(c.
getRed());
521 vecValues.push_back(c.
getBlue());
523 m_rasterOut->setValues((
int)ocol, (
int)olin, vecValues);
530 m_rasterIn->getValue((
int)icol, (
int)ilin, val, m_monoBand);
532 if(checkNoValue(val, m_monoBand) ==
false)
533 return getCategorizedColor(val);
542 m_rasterIn->getValue((
int)icol, (
int)ilin, val, m_monoBand);
546 std::vector<double> vecValues;
547 vecValues.push_back(c.
getRed());
549 vecValues.push_back(c.
getBlue());
551 m_rasterOut->setValues((
int)ocol, (
int)olin, vecValues);
558 m_rasterIn->getValue((
int)icol, (
int)ilin, val, m_monoBand);
560 if(checkNoValue(val, m_monoBand) ==
false)
561 return getInterpolatedColor(val);
570 for(std::size_t t = 0; t < m_rasterIn->getNumberOfBands(); ++t)
572 m_rasterIn->getValue((
int)icol, (
int)ilin, val, t);
574 if(checkNoValue(val, t) ==
false)
576 val = (val * m_gain + m_offset);
580 m_rasterOut->setValue((
int)ocol, (
int)olin, val, t);
587 if (value < m_rstMinValue)
589 value = m_rstMinValue;
591 else if (value > m_rstMaxValue)
593 value = m_rstMaxValue;
599 if(m_rasterIn->getBand(band)->getProperty()->m_noDataValue == value)
609 InterpolatedMap::iterator it = m_interpolateMap.begin();
611 while(it != m_interpolateMap.end())
615 if(rt.first<= value && rt.second > value)
617 int distance = int(value - it->first.first);
623 else if(distance >= (
int)it->second.getColorBar().size())
625 distance = it->second.getColorBar().size() - 1;
628 return it->second.getColorBar()[distance];
639 CategorizedMap::iterator it = m_categorizeMap.begin();
641 while(it != m_categorizeMap.end())
645 if(rt.first<= value && rt.second > value)
int getRed() const
It returns the red component color value (a value from 0 to 255).
int getBlue() const
It returns the blue component color value (a value from 0 to 255).
int getGreen() const
It returns the green component color value (a value from 0 to 255).
An abstract class for raster data strucutures.
#define TE_OPAQUE
For an RGBA color this is the value of the alpha-channel for totally opaque.
A helper class for 32-bit RGBA (Red-Green-Blue-Alpha channel) color.
#define TE_SE_DEFAULT_GAMMA_VALUE
It specifies the default gamma value.