App
Public Member Functions | Static Public Attributes | Protected Member Functions | List of all members
app::TFInterpolator< TPIXEL, TCHANNEL > Class Template Referenceabstract

#include <TFInterpolator.hpp>

Inheritance diagram for app::TFInterpolator< TPIXEL, TCHANNEL >:
app::TCubicFInt< TPIXEL, TCHANNEL > app::TLinearFInt< TPIXEL, TCHANNEL > app::TNearestFInt< TPIXEL, TCHANNEL >

Public Member Functions

 TFInterpolator ()
 
virtual ~TFInterpolator ()
 
virtual TPIXEL * getSrcData () const =0
 
virtual unsigned getSrcWidth () const =0
 
virtual unsigned getSrcHeight () const =0
 
virtual int isInitOk () const =0
 
virtual int resampleTo (TBitmap< TPIXEL, TCHANNEL > &dst) const
 
virtual int resampleTo_aliased (TBitmap< TPIXEL, TCHANNEL > &dst, double force=1) const
 

Static Public Attributes

static const unsigned chCount = sizeof(TPIXEL) / sizeof(TCHANNEL)
 Počet kanálů bitmapy.
 
static const TCHANNEL maxVal = ~0
 Maximální hodnota kanálu.
 

Protected Member Functions

virtual int resampleTo_4ch (TBitmap< TPIXEL, TCHANNEL > &dst) const =0
 
virtual int resampleTo_1ch (TBitmap< TPIXEL, TCHANNEL > &dst) const =0
 
virtual TFInterpolator< TPIXEL,
TCHANNEL > * 
newInstance (const TBitmap< TPIXEL, TCHANNEL > &over) const =0
 

Detailed Description

template<typename TPIXEL, typename TCHANNEL>
class app::TFInterpolator< TPIXEL, TCHANNEL >

Definition at line 24 of file TFInterpolator.hpp.

Constructor & Destructor Documentation

template<typename TPIXEL, typename TCHANNEL>
app::TFInterpolator< TPIXEL, TCHANNEL >::TFInterpolator ( )
inline

Definition at line 36 of file TFInterpolator.hpp.

{
}
template<typename TPIXEL , typename TCHANNEL >
TFInterpolator< TPIXEL, TCHANNEL >::~TFInterpolator ( )
virtual

Definition at line 9 of file TFInterpolator.cpp.

{
}

Member Function Documentation

template<typename TPIXEL, typename TCHANNEL>
virtual TPIXEL* app::TFInterpolator< TPIXEL, TCHANNEL >::getSrcData ( ) const
pure virtual
template<typename TPIXEL, typename TCHANNEL>
virtual unsigned app::TFInterpolator< TPIXEL, TCHANNEL >::getSrcHeight ( ) const
pure virtual
template<typename TPIXEL, typename TCHANNEL>
virtual unsigned app::TFInterpolator< TPIXEL, TCHANNEL >::getSrcWidth ( ) const
pure virtual
template<typename TPIXEL, typename TCHANNEL>
virtual int app::TFInterpolator< TPIXEL, TCHANNEL >::isInitOk ( ) const
pure virtual
template<typename TPIXEL, typename TCHANNEL>
virtual TFInterpolator<TPIXEL, TCHANNEL>* app::TFInterpolator< TPIXEL, TCHANNEL >::newInstance ( const TBitmap< TPIXEL, TCHANNEL > &  over) const
protectedpure virtual
template<typename TPIXEL , typename TCHANNEL >
int TFInterpolator< TPIXEL, TCHANNEL >::resampleTo ( TBitmap< TPIXEL, TCHANNEL > &  dst) const
virtual

Definition at line 13 of file TFInterpolator.cpp.

{
if (chCount == 1) {
return resampleTo_1ch(dst);
} else if (chCount == 4) {
return resampleTo_4ch(dst);
} else {
return 100;
}
}
template<typename TPIXEL, typename TCHANNEL>
virtual int app::TFInterpolator< TPIXEL, TCHANNEL >::resampleTo_1ch ( TBitmap< TPIXEL, TCHANNEL > &  dst) const
protectedpure virtual
template<typename TPIXEL, typename TCHANNEL>
virtual int app::TFInterpolator< TPIXEL, TCHANNEL >::resampleTo_4ch ( TBitmap< TPIXEL, TCHANNEL > &  dst) const
protectedpure virtual
template<typename TPIXEL , typename TCHANNEL >
int TFInterpolator< TPIXEL, TCHANNEL >::resampleTo_aliased ( TBitmap< TPIXEL, TCHANNEL > &  dst,
double  force = 1 
) const
virtual

Definition at line 24 of file TFInterpolator.cpp.

{
if (getSrcData() == NULL) {
return 1;
}
TPIXEL * const dstData = dst.getData();
if (dstData == NULL) {
return 2;
}
if (!isInitOk()) {
return 3;
}
unsigned origWidth = getSrcWidth();
unsigned origHeight = getSrcHeight();
unsigned dstWidth = dst.getWidth();
unsigned dstHeight = dst.getHeight();
// Jako sigmu bereme poloměr pixeli, pokud tento po násobení sílou je větší než hraniční, provede se filtrace, ta je ale možná zbytečně agresivní
// a vztah pro určení sigmy je jen od oka... Každopádně filtruje se pro zmenšní o více než 1%, filtrace ale nenaskakuje na nejmenší míře (ta je 0.35, nikoliv 0.505
double xSigma = force * origWidth / (2.0 * dstWidth);
double ySigma = force * origHeight / (2.0 * dstHeight);
xSigma = (xSigma < 0.505) ? 0 : xSigma;
ySigma = (ySigma < 0.505) ? 0 : ySigma;
if (xSigma > 0.35 || ySigma > 0.35) {
TBitmap<TPIXEL, TCHANNEL> * source = new TBitmap<TPIXEL, TCHANNEL>(getSrcData(), getSrcWidth(), getSrcHeight(), dst.getType(), false); // Wrapper
if (source == NULL) {
return 4;
}
if (preBlurred == NULL) {
delete source;
return 5;
}
TGaussianBlur<TPIXEL, TCHANNEL> preBlur(xSigma, ySigma);
preBlur.applyTo(*preBlurred, preBlurred->getRect());
if (i == NULL) {
delete source;
delete preBlurred;
return 6;
}
int retVal = 7;
if (i->isInitOk()) {
retVal = i->resampleTo(dst);
}
delete source;
delete preBlurred;
delete i;
return retVal;
} else {
return resampleTo(dst);
}
}

Member Data Documentation

template<typename TPIXEL, typename TCHANNEL>
const unsigned TFInterpolator< TPIXEL, TCHANNEL >::chCount = sizeof(TPIXEL) / sizeof(TCHANNEL)
static

Počet kanálů bitmapy.

Definition at line 33 of file TFInterpolator.hpp.

template<typename TPIXEL, typename TCHANNEL>
const TCHANNEL TFInterpolator< TPIXEL, TCHANNEL >::maxVal = ~0
static

Maximální hodnota kanálu.

Definition at line 34 of file TFInterpolator.hpp.


The documentation for this class was generated from the following files: