26 #ifndef __TERRALIB_MAPTOOLS_INTERNAL_RASTERTRANSFORM_H
27 #define __TERRALIB_MAPTOOLS_INTERNAL_RASTERTRANSFORM_H
31 #include "../color/RGBAColor.h"
32 #include "../color/ColorBar.h"
33 #include "../raster.h"
45 class RasterSymbolizer;
69 typedef void (
RasterTransform::*TransformFunction)(double, double, double, double);
71 typedef void (
RasterTransform::*ChannelDomainGetFunction)(
unsigned int c,
unsigned int r,
double& value, std::size_t band);
83 REAL_CHANNEL_DOMAIN=0,
84 IMAGINARY_CHANNEL_DOMAIN=1,
103 EXTRACT2RGB_TRANSF=2,
105 GREEN2THREE_TRANSF=4,
108 INTERPOLATE_TRANSF=7,
255 void setTransfParameters(
double rmin,
double rmax,
double gain,
double offset1,
double offset2,
int band);
284 void apply(
double icol,
double ilin,
double ocol,
double olin) {(this->*m_transfFuncPtr)(icol,ilin,ocol,olin); }
295 const std::vector< double >& contrastOffsets1,
296 const std::vector< double >& contrastOffsets2 );
316 typedef void (
RasterTransform::*ContrastTransformFunction)(
const unsigned int&,
const double&,
double&)
const;
323 const int height,
void* buffer,
326 m_dataType(bandDataType),
333 if( domain == REAL_CHANNEL_DOMAIN )
335 m_channelDomainGetFuncPtr = &BandBufferInfo::getRealValueChannelDomainGetFunction;
337 else if( domain == IMAGINARY_CHANNEL_DOMAIN )
339 m_channelDomainGetFuncPtr = &BandBufferInfo::getImaginaryValueChannelDomainGetFunction;
341 else if( domain == SQRT_CHANNEL_DOMAIN )
343 m_channelDomainGetFuncPtr = &BandBufferInfo::getSQRTChannelDomainGetFunction;
352 const unsigned int r,
double& value )
const
354 (this->*(m_channelDomainGetFuncPtr))( c, r, value );
359 unsigned char* buffer =
static_cast<unsigned char*
>(m_buffer);
366 const unsigned int c,
const unsigned int r,
double& value )
const;
383 const unsigned int r,
double& value)
const
386 m_getBuff( c + ( r * m_width ), m_buffer, &value );
390 const unsigned int r,
double& value)
const
393 m_getBuffI( c + ( r * m_width ), m_buffer, &value );
397 const unsigned int r,
double& value)
const
400 m_getBuff( c + ( r * m_width ), m_buffer, &m_auxRealValue );
401 m_getBuffI( c + ( r * m_width ), m_buffer, &m_auxImagValue );
402 value = std::sqrt( ( m_auxRealValue * m_auxRealValue )
403 + ( m_auxImagValue * m_auxImagValue ) ) ;
421 m_rstMinValue(-std::numeric_limits<double>::max()),
422 m_rstMaxValue(std::numeric_limits<double>::max()),
425 m_contrastOffset1(0.0),
426 m_contrastOffset2(0.0),
427 m_noDataValue(std::numeric_limits<double>::max())
494 void setRecode(
double icol,
double ilin,
double ocol,
double olin);
503 inline void applyLinearContrast(
const unsigned int& bandIdx,
const double& inputValue,
double& outputValue)
const
505 assert( bandIdx < m_inputNBands );
506 outputValue = ( ( inputValue + m_transformBandInfo[bandIdx]->m_contrastOffset1 ) *
507 m_transformBandInfo[bandIdx]->m_contrastGain ) + m_transformBandInfo[bandIdx]->m_contrastOffset2;
511 inline void applySquareContrast(
const unsigned int& bandIdx,
const double& inputValue,
double& outputValue)
const
513 assert( bandIdx < m_inputNBands );
514 outputValue = std::pow( inputValue, 2.0 ) * m_transformBandInfo[bandIdx]->m_contrastGain;
520 assert( bandIdx < m_inputNBands );
521 outputValue = std::sqrt( inputValue ) * m_transformBandInfo[bandIdx]->m_contrastGain;
525 inline void applyLogContrast(
const unsigned int& bandIdx,
const double& inputValue,
double& outputValue)
const
527 assert( bandIdx < m_inputNBands );
528 outputValue = std::log10( inputValue + m_transformBandInfo[bandIdx]->m_contrastOffset1 + 1.0 ) *
529 m_transformBandInfo[bandIdx]->m_contrastGain;
533 inline void fixValue(
double& value,
short& band)
const
535 value = std::max(m_transformBandInfo[band]->m_rstMinValue, std::min(m_transformBandInfo[band]->m_rstMaxValue, value));
545 return (m_transformBandInfo[band]->m_noDataValue == value);
567 m_rasterIn->getValue(c, r, value, b );
573 std::complex<double> cValue;
574 m_rasterIn->getValue(c, r, cValue, b );
575 value = cValue.imag();
581 std::complex<double> cValue;
582 m_rasterIn->getValue(c, r, cValue, b );
583 value = std::sqrt( ( cValue.real() * cValue.real() )
584 + ( cValue.imag() * cValue.imag() ) ) ;
#define TE_TR(message)
It marks a string in order to get translated.
A helper class for 32-bit RGBA (Red-Green-Blue-Alpha channel) color.
An abstract class for raster data strucutures.
void(* SetBufferValueFPtr)(int index, void *buffer, const double *value)
The type of function used to extract data from a buffer.
void(* GetBufferValueFPtr)(int index, void *buffer, double *value)
The type of function used to extract data from a buffer.
TERASTEREXPORT void SetBlockFunctions(GetBufferValueFPtr *gb, GetBufferValueFPtr *gbi, SetBufferValueFPtr *sb, SetBufferValueFPtr *sbi, int type)
Sets the pointers to functions that helps to extract a double or complex value from a specific buffer...
Base exception class for plugin module.
Proxy configuration file for TerraView (see terraview_config.h).
An exception class for the XML module.