29 #include "../raster.h"
30 #include "../raster/RasterProperty.h"
31 #include "../se/RasterSymbolizer.h"
57 m_categorizeMap.clear();
58 m_interpolateMap.clear();
65 m_rgbMap[RED_CHANNEL] = -1;
66 m_rgbMap[GREEN_CHANNEL] = -1;
67 m_rgbMap[BLUE_CHANNEL] = -1;
69 std::map<RGBChannels,short>::iterator it = m_rgbMap.begin();
70 while (it != m_rgbMap.end())
72 if (it->first == RED_CHANNEL)
73 m_rgbMap[RED_CHANNEL] = it->second;
75 else if (it->first == GREEN_CHANNEL)
76 m_rgbMap[GREEN_CHANNEL] = it->second;
78 else if (it->first == BLUE_CHANNEL)
79 m_rgbMap[BLUE_CHANNEL] = it->second;
97 m_gain = (double)(rmax-rmin)/(vmax-vmin);
98 m_offset = -1*m_gain*vmin+rmin;
104 if (m_transfFuncPtr == 0 || m_RGBAFuncPtr)
111 return MONO2THREE_TRANSF;
116 return EXTRACT2RGB_TRANSF;
121 return RED2THREE_TRANSF;
126 return GREEN2THREE_TRANSF;
131 return BLUE2THREE_TRANSF;
136 return CATEGORIZE_TRANSF;
141 return INTERPOLATE_TRANSF;
145 return BAND2BAND_TRANSF;
155 if (func == MONO2THREE_TRANSF)
160 else if (func == EXTRACT2RGB_TRANSF)
165 else if (func == RED2THREE_TRANSF)
170 else if (func == GREEN2THREE_TRANSF)
175 else if (func == BLUE2THREE_TRANSF)
180 else if (func == CATEGORIZE_TRANSF)
185 else if (func == INTERPOLATE_TRANSF)
190 else if (func == BAND2BAND_TRANSF)
195 else if (func == EXTRACT2RGBA_TRANSF)
211 m_rasterIn->getValue((
int)icol, (
int)ilin, val, m_monoBand);
213 if(checkNoValue(val, m_monoBand) ==
false)
215 val = (val * m_gain + m_offset) * m_mContrast;
219 std::vector<double> vecValues;
220 vecValues.resize(3, val);
222 m_rasterOut->setValues((
int)ocol, (
int)olin, vecValues);
230 m_rasterIn->getValue((
int)icol, (
int)ilin, val, m_monoBand);
232 if(checkNoValue(val, m_monoBand) ==
false)
234 val = (val * m_gain + m_offset) * m_mContrast;
238 te::color::RGBAColor c(static_cast<int>(val), static_cast<int>(val), static_cast<int>(val), static_cast<int>(m_transp));
248 double valR, valG, valB;
250 m_rasterIn->getValue((
int)icol, (
int)ilin, valR, m_rgbMap[RED_CHANNEL]);
251 m_rasterIn->getValue((
int)icol, (
int)ilin, valG, m_rgbMap[GREEN_CHANNEL]);
252 m_rasterIn->getValue((
int)icol, (
int)ilin, valB, m_rgbMap[BLUE_CHANNEL]);
254 if(checkNoValue(valR, m_rgbMap[RED_CHANNEL]) ==
false ||
255 checkNoValue(valG, m_rgbMap[GREEN_CHANNEL]) ==
false ||
256 checkNoValue(valB, m_rgbMap[BLUE_CHANNEL]) ==
false)
258 std::vector<double> vecValues;
260 valR = (valR * m_gain + m_offset) * m_rContrast;
262 vecValues.push_back(valR);
264 valG = (valG * m_gain + m_offset) * m_gContrast;
266 vecValues.push_back(valG);
268 valB = (valB * m_gain + m_offset) * m_bContrast;
270 vecValues.push_back(valB);
272 m_rasterOut->setValues((
int)ocol, (
int)olin, vecValues);
278 double valR, valG, valB;
280 m_rasterIn->getValue((
int)icol, (
int)ilin, valR, m_rgbMap[RED_CHANNEL]);
281 m_rasterIn->getValue((
int)icol, (
int)ilin, valG, m_rgbMap[GREEN_CHANNEL]);
282 m_rasterIn->getValue((
int)icol, (
int)ilin, valB, m_rgbMap[BLUE_CHANNEL]);
284 if(checkNoValue(valR, m_rgbMap[RED_CHANNEL]) ==
false ||
285 checkNoValue(valG, m_rgbMap[GREEN_CHANNEL]) ==
false ||
286 checkNoValue(valB, m_rgbMap[BLUE_CHANNEL]) ==
false)
288 valR = (valR * m_gain + m_offset) * m_rContrast;
291 valG = (valG * m_gain + m_offset) * m_gContrast;
294 valB = (valB * m_gain + m_offset) * m_bContrast;
297 te::color::RGBAColor c(static_cast<int>(valR), static_cast<int>(valG), static_cast<int>(valB), static_cast<int>(m_transp));
307 double valR, valG, valB, valA;
309 m_rasterIn->getValue((
int)icol, (
int)ilin, valR, m_rgbMap[RED_CHANNEL]);
310 m_rasterIn->getValue((
int)icol, (
int)ilin, valG, m_rgbMap[GREEN_CHANNEL]);
311 m_rasterIn->getValue((
int)icol, (
int)ilin, valB, m_rgbMap[BLUE_CHANNEL]);
312 m_rasterIn->getValue((
int)icol, (
int)ilin, valA, m_rgbMap[ALPHA_CHANNEL]);
314 if(checkNoValue(valR, m_rgbMap[RED_CHANNEL]) ==
false ||
315 checkNoValue(valG, m_rgbMap[GREEN_CHANNEL]) ==
false ||
316 checkNoValue(valB, m_rgbMap[BLUE_CHANNEL]) ==
false ||
317 checkNoValue(valA, m_rgbMap[ALPHA_CHANNEL]) ==
false)
319 std::vector<double> vecValues;
321 valR = (valR * m_gain + m_offset) * m_rContrast;
323 vecValues.push_back(valR);
325 valG = (valG * m_gain + m_offset) * m_gContrast;
327 vecValues.push_back(valG);
329 valB = (valB * m_gain + m_offset) * m_bContrast;
331 vecValues.push_back(valB);
334 vecValues.push_back(valB);
336 m_rasterOut->setValues((
int)ocol, (
int)olin, vecValues);
342 double valR, valG, valB, valA;
344 m_rasterIn->getValue((
int)icol, (
int)ilin, valR, m_rgbMap[RED_CHANNEL]);
345 m_rasterIn->getValue((
int)icol, (
int)ilin, valG, m_rgbMap[GREEN_CHANNEL]);
346 m_rasterIn->getValue((
int)icol, (
int)ilin, valB, m_rgbMap[BLUE_CHANNEL]);
347 m_rasterIn->getValue((
int)icol, (
int)ilin, valA, m_rgbMap[ALPHA_CHANNEL]);
349 if(checkNoValue(valR, m_rgbMap[RED_CHANNEL]) ==
false ||
350 checkNoValue(valG, m_rgbMap[GREEN_CHANNEL]) ==
false ||
351 checkNoValue(valB, m_rgbMap[BLUE_CHANNEL]) ==
false ||
352 checkNoValue(valA, m_rgbMap[ALPHA_CHANNEL]) ==
false)
354 valR = (valR * m_gain + m_offset) * m_rContrast;
357 valG = (valG * m_gain + m_offset) * m_gContrast;
360 valB = (valB * m_gain + m_offset) * m_bContrast;
366 return te::color::RGBAColor(static_cast<int>(valR), static_cast<int>(valG), static_cast<int>(valB), static_cast<int>(valA));
368 return te::color::RGBAColor(static_cast<int>(valR), static_cast<int>(valG), static_cast<int>(valB), static_cast<int>(m_transp));
378 m_rasterIn->getValue((
int)icol, (
int)ilin, val, m_rgbMap[RED_CHANNEL]);
380 if(checkNoValue(val, m_rgbMap[RED_CHANNEL]) ==
false)
382 val = (val * m_gain + m_offset) * m_rContrast;
386 std::vector<double> vecValues;
387 vecValues.push_back(val);
388 vecValues.push_back(0.);
389 vecValues.push_back(0.);
391 m_rasterOut->setValues((
int)ocol, (
int)olin, vecValues);
399 m_rasterIn->getValue((
int)icol, (
int)ilin, val, m_rgbMap[RED_CHANNEL]);
401 if(checkNoValue(val, m_rgbMap[RED_CHANNEL]) ==
false)
403 val = (val * m_gain + m_offset) * m_rContrast;
407 te::color::RGBAColor c(static_cast<int>(val), static_cast<int>(0.), static_cast<int>(0.), static_cast<int>(m_transp));
420 m_rasterIn->getValue((
int)icol, (
int)ilin, val, m_rgbMap[GREEN_CHANNEL]);
422 if(checkNoValue(val, m_rgbMap[GREEN_CHANNEL]) ==
false)
424 val = (val * m_gain + m_offset) * m_gContrast;
428 std::vector<double> vecValues;
429 vecValues.push_back(0.);
430 vecValues.push_back(val);
431 vecValues.push_back(0.);
433 m_rasterOut->setValues((
int)ocol, (
int)olin, vecValues);
441 m_rasterIn->getValue((
int)icol, (
int)ilin, val, m_rgbMap[GREEN_CHANNEL]);
443 if(checkNoValue(val, m_rgbMap[GREEN_CHANNEL]) ==
false)
445 val = (val * m_gain + m_offset) * m_gContrast;
449 te::color::RGBAColor c(static_cast<int>(0.), static_cast<int>(val), static_cast<int>(0.), static_cast<int>(m_transp));
462 m_rasterIn->getValue((
int)icol, (
int)ilin, val, m_rgbMap[BLUE_CHANNEL]);
464 if(checkNoValue(val, m_rgbMap[BLUE_CHANNEL]) ==
false)
466 val = (val * m_gain + m_offset) * m_bContrast;
470 std::vector<double> vecValues;
471 vecValues.push_back(0.);
472 vecValues.push_back(0.);
473 vecValues.push_back(val);
475 m_rasterOut->setValues((
int)ocol, (
int)olin, vecValues);
483 m_rasterIn->getValue((
int)icol, (
int)ilin, val, m_rgbMap[BLUE_CHANNEL]);
485 if(checkNoValue(val, m_rgbMap[BLUE_CHANNEL]) ==
false)
487 val = (val * m_gain + m_offset) * m_bContrast;
491 te::color::RGBAColor c(static_cast<int>(0.), static_cast<int>(0.), static_cast<int>(val), static_cast<int>(m_transp));
504 m_rasterIn->getValue((
int)icol, (
int)ilin, val, m_monoBand);
508 std::vector<double> vecValues;
509 vecValues.push_back(c.
getRed());
511 vecValues.push_back(c.
getBlue());
513 m_rasterOut->setValues((
int)ocol, (
int)olin, vecValues);
520 m_rasterIn->getValue((
int)icol, (
int)ilin, val, m_monoBand);
522 return getCategorizedColor(val);
529 m_rasterIn->getValue((
int)icol, (
int)ilin, val, m_monoBand);
533 std::vector<double> vecValues;
534 vecValues.push_back(c.
getRed());
536 vecValues.push_back(c.
getBlue());
538 m_rasterOut->setValues((
int)ocol, (
int)olin, vecValues);
545 m_rasterIn->getValue((
int)icol, (
int)ilin, val, m_monoBand);
547 return getInterpolatedColor(val);
554 for(std::size_t t = 0; t < m_rasterIn->getNumberOfBands(); ++t)
556 m_rasterIn->getValue((
int)icol, (
int)ilin, val, t);
558 if(checkNoValue(val, t) ==
false)
560 val = (val * m_gain + m_offset);
564 m_rasterOut->setValue((
int)ocol, (
int)olin, val, t);
571 if (value < m_rstMinValue)
573 value = m_rstMinValue;
575 else if (value > m_rstMaxValue)
577 value = m_rstMaxValue;
583 if(m_rasterIn->getBand(band)->getProperty()->m_noDataValue == value)
593 InterpolatedMap::iterator it = m_interpolateMap.begin();
595 while(it != m_interpolateMap.end())
599 if(rt.first<= value && rt.second > value)
601 int distance = int(value - it->first.first);
607 else if(distance >= (
int)it->second.getColorBar().size())
609 distance = it->second.getColorBar().size() - 1;
612 return it->second.getColorBar()[distance];
623 CategorizedMap::iterator it = m_categorizeMap.begin();
625 while(it != m_categorizeMap.end())
629 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.