10#include "Interpolator.h" 
   61          string message = 
"Interpolator type not set";
 
   65      case NearestNeighborType:
 
   71      case CubicConvolutionType:
 
   76    string message = 
"Invalid interpolator";
 
 
  102                                       const double buf[]) {
 
 
  119                                const double buf[]) {
 
  122    double j = int (isamp);
 
  123    double k = int (iline);
 
  124    double a = isamp - j;
 
  125    double b = iline - k;
 
  128    for(
int i = 0; i < 4; i++) {
 
  131                               &buf[(
int)(a + 0.5) + 2 * (
int)(b+0.5)]);
 
  137    return (1.0 - a) * (1.0 - b) * buf[0] +
 
  138           a * (1.0 - b) * buf[1] +
 
  139           (1.0 - a) * b * buf[2] +
 
 
  158                                        const double buf[]) {
 
  161    for(
int i = 0; i < 16; i++) {
 
  163        double tbuf[4] = {buf[5], buf[6], buf[9], buf[10]};
 
  164        return BiLinear(isamp, iline, tbuf);
 
  169    double j = int (isamp);
 
  170    double k = int (iline);
 
  171    double a = isamp - j;
 
  172    double b = iline - k;
 
  181    return  -b * (1.0 - b) * (1.0 - b) * (-a * (1.0 - a) * (1.0 - a) * buf[0] +
 
  182                                          (1.0 - 2.0 * a * a + a * a * a) * buf[1] +
 
  183                                          a * (1.0 + a - a * a) * buf[2] -
 
  184                                          a * a * (1.0 - a) * buf[3]) +
 
  186            (1.0 - 2.0 * b * b + b * b * b) * (-a * (1.0 - a) * (1.0 - a) * buf[4] +
 
  187                (1.0 - 2.0 * a * a + a * a * a) * buf[5] +
 
  188                a * (1.0 + a - a * a) * buf[6] -
 
  189                a * a * (1.0 - a) * buf[7]) +
 
  191            b * (1.0 + b - b * b) * (-a * (1.0 - a) * (1.0 - a) * buf[8] +
 
  192                                     (1.0 - 2.0 * a * a + a * a * a) * buf[9] +
 
  193                                     a * (1.0 + a - a * a) * buf[10] -
 
  194                                     a * a * (1.0 - a) * buf[11]) +
 
  196            b * b * (b - 1.0) * (-a * (1.0 - a) * (1.0 - a) * buf[12] +
 
  197                                 (1.0 - 2.0 * a * a + a * a * a) * buf[13] +
 
  198                                 a * (1.0 + a - a * a) * buf[14] -
 
  199                                 a * a * (1.0 - a) * buf[15]);
 
 
  212          string message = 
"Interpolator type not set";
 
  216      case NearestNeighborType:
 
  222      case CubicConvolutionType:
 
  227    string message = 
"Invalid interpolator";
 
 
  240          string message = 
"Interpolator type not set";
 
  244      case NearestNeighborType:
 
  250      case CubicConvolutionType:
 
  255    string message = 
"Invalid interpolator";
 
 
  269          string message = 
"Interpolator type not set";
 
  274      case NearestNeighborType:
 
  282      case CubicConvolutionType:
 
  287    string message = 
"Invalid interpolator";
 
 
  301          string message = 
"Interpolator type not set";
 
  306      case NearestNeighborType:
 
  314      case CubicConvolutionType:
 
  319    string message = 
"Invalid interpolator";
 
 
@ Programmer
This error is for when a programmer made an API call that was illegal.
 
Interpolator()
Constructs an empty Interpolator object.
 
int Samples()
Returns the number of samples needed by the interpolator.
 
~Interpolator()
Destroys the Interpolator object.
 
double CubicConvolution(const double isamp, const double iline, const double buf[])
Performs a cubic-convulsion interpolation on the buffer data.
 
int Lines()
Returns the number of lines needed by the interpolator.
 
double HotSample()
Returns the sample coordinate of the center pixel in the buffer for the interpolator.
 
double NearestNeighbor(const double isamp, const double iline, const double buf[])
Performs a nearest-neighbor interpolation on the buffer data.
 
void Init()
Initializes the object data members.
 
double BiLinear(const double isamp, const double iline, const double buf[])
Performs a bi-linear interpolation on the buffer data.
 
double HotLine()
Returns the line coordinate of the center pixel in the buffer for the interpolator.
 
interpType p_type
The type of interpolation to be performed.
 
interpType
The interpolator type, including: None, Nearest Neighbor, BiLinear or Cubic Convultion.
 
void SetType(const interpType &type)
Sets the type of interpolation.
 
double Interpolate(const double isamp, const double iline, const double buf[])
Performs an interpolation on the data according to the parameters set in the constructor.
 
This is free and unencumbered software released into the public domain.
 
bool IsSpecial(const double d)
Returns if the input pixel is special.
 
Namespace for the standard library.