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.