28 theMinifyFilterType(ossimFilterResampler_NEAREST_NEIGHBOR),
29 theMagnifyFilterType(ossimFilterResampler_NEAREST_NEIGHBOR),
30 theScaleFactor(1.0, 1.0),
31 theInverseScaleFactor(1.0, 1.0),
206 <<
"ossimFilterResampler::resample error: unknown scalar type: " 207 << scalarType << endl;
325 std::cout <<
"INPUT = \n" << *input << std::endl
326 <<
"OUTPUT = \n" << *output << std::endl
327 <<
"inputUL= " << inputUl << std::endl
328 <<
"inputUR= " << inputUr << std::endl
329 <<
"deltaUL= " << deltaUl << std::endl
330 <<
"deltaUr= " << deltaUr << std::endl
331 <<
"outlength= " << outLength << std::endl;
338 stepSizeWidth = 1.0/(outLength.
x-1.0);
360 (outputSubRect.
ul().
x - outputRect.
ul().
x);
365 const T* *inputBuf =
new const T*[BANDS];
366 T* *resultBuf =
new T*[BANDS];
367 if(!pixelvals||!inputBuf||!resultBuf)
372 for(band = 0; band < BANDS; ++band)
374 inputBuf[band] =
static_cast<const T*
>(input->
getBuf(band));
375 resultBuf[band] =
static_cast<T*
>(output->
getBuf(band))+resultOffset;
384 double initialx = inputUl.
x-inputRect.
ul().
x;
385 double initialy = inputUl.
y-inputRect.
ul().
y;
386 double terminalx = inputUr.
x-inputRect.
ul().
x;
387 double terminaly = inputUr.
y-inputRect.
ul().
y;
388 double pointx,pointy,deltaX,deltaY;
391 if(xkernel_width==0 || ykernel_height==0)
394 for(
ossim_uint32 resultY = 0; resultY < resultRectH; ++resultY)
399 deltaX = (terminalx-initialx) * stepSizeWidth;
400 deltaY = (terminaly-initialy) * stepSizeWidth;
403 for(
ossim_uint32 resultX = 0; resultX < resultRectW; ++resultX)
406 centerOffset = ossim::round<int>(pointy)*inWidth + ossim::round<int>(pointx);
407 for(band=0;band<BANDS;++band)
409 resultBuf[band][resultX] = inputBuf[band][centerOffset];
416 for(band=0;band<BANDS;++band)
418 resultBuf[band] += outputRectW;
420 initialx += deltaUl.
x;
421 initialy += deltaUl.
y;
422 terminalx += deltaUr.
x;
423 terminaly += deltaUr.
y;
430 const double* kernel;
432 for(
ossim_uint32 resultY = 0; resultY < resultRectH; ++resultY)
434 deltaX = (terminalx-initialx) * stepSizeWidth;
435 deltaY = (terminaly-initialy) * stepSizeWidth;
438 for(
ossim_uint32 resultX = 0; resultX < resultRectW; ++resultX)
440 starty = ossim::round<int>(pointy - ykernel_half_height + .5);
441 startx = ossim::round<int>(pointx - xkernel_half_width + .5);
442 centerOffset = ossim::round<int>(pointy)*inWidth + ossim::round<int>(pointx);
443 sourceIndex = starty*inWidth+startx;
447 if(centerOffset<inBandSize)
449 for (band=0;band<BANDS;++band)
451 if(inputBuf[band][centerOffset]==static_cast<T>(NULL_PIX[band]))
464 if ( nullCount==BANDS || (sourceIndex>=inBandSize))
467 for (band=0;band<BANDS;++band)
469 resultBuf[band][resultX] =
static_cast<T
>(NULL_PIX[band]);
482 for (iy=0;((iy<ykernel_height)&&(sourceIndex<inBandSize));++iy)
484 for (ix = 0;((ix<xkernel_width)&&(sourceIndex<inBandSize));++ix)
487 for(band=0;band<BANDS;++band)
489 if(inputBuf[band][sourceIndex]!=NULL_PIX[band])
491 densityvals[band] += tmpFlt64;
492 pixelvals[band] += (inputBuf[band][sourceIndex]*tmpFlt64);
497 if(sourceIndex>=inBandSize)
502 sourceIndex+=(inWidth-xkernel_width);
506 for (band = 0; band < BANDS; ++band)
515 tmpFlt64 = NULL_PIX[band];
520 tmpFlt64 = pixelvals[band]/densityvals[band];
524 tmpFlt64 = (tmpFlt64>=MIN_PIX[band]?(tmpFlt64<MAX_PIX[band]?tmpFlt64:MAX_PIX[band]):MIN_PIX[band]);
526 resultBuf[band][resultX] =
static_cast<T
>(tmpFlt64);
533 for (band=0;band<BANDS;++band)
535 resultBuf[band][resultX] =
static_cast<T
>(NULL_PIX[band]);
544 for(band=0;band<BANDS;++band)
546 resultBuf[band] += outputRectW;
548 initialx += deltaUl.
x;
549 initialy += deltaUl.
y;
550 terminalx += deltaUr.
x;
551 terminaly += deltaUr.
y;
555 delete [] densityvals;
567 return "nearest neighbor";
639 return "nearest neighbor";
644 filterTypes.push_back(
"nearest neighbor");
645 filterTypes.push_back(
"bilinear");
646 filterTypes.push_back(
"cubic");
648 filterTypes.push_back(
"bessel");
649 filterTypes.push_back(
"blackman");
650 filterTypes.push_back(
"box");
651 filterTypes.push_back(
"bspline");
652 filterTypes.push_back(
"catrom");
653 filterTypes.push_back(
"gaussian");
654 filterTypes.push_back(
"hanning");
655 filterTypes.push_back(
"hamming");
656 filterTypes.push_back(
"hermite");
657 filterTypes.push_back(
"lanczos");
658 filterTypes.push_back(
"mitchell");
659 filterTypes.push_back(
"quadratic");
660 filterTypes.push_back(
"sinc");
661 filterTypes.push_back(
"magic");
668 typeUpper = typeUpper.
upcase();
674 else if(typeUpper.
contains(
"NEAREST"))
678 else if(typeUpper.
contains(
"GAUSSIAN"))
682 else if(typeUpper.
contains(
"HANNING"))
686 else if(typeUpper.
contains(
"HAMMING"))
690 else if(typeUpper.
contains(
"LANCZOS"))
694 else if(typeUpper.
contains(
"MITCHELL"))
698 else if(typeUpper.
contains(
"CATROM"))
702 else if(typeUpper.
contains(
"CUBIC"))
706 else if(typeUpper.
contains(
"BESSEL"))
714 else if(typeUpper.
contains(
"BLACKMAN"))
718 else if(typeUpper.
contains(
"QUADRATIC"))
722 else if(typeUpper.
contains(
"TRIANGLE"))
726 else if(typeUpper.
contains(
"BILINEAR"))
730 else if(typeUpper.
contains(
"HERMITE"))
738 else if(typeUpper.
contains(
"BSPLINE"))
742 else if(typeUpper.
contains(
"MAGIC"))
755 if(!horizontalFilter)
879 const char* prefix)
const 904 const char* lookup = 0;
918 lookup = kwl.
find(prefix,
"minify_type");
924 lookup = kwl.
find(prefix,
"magnify_type");
16 bit unsigned integer (15 bits used)
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
virtual ossim_uint32 getWidth() const
ossim_float64 theBlurFactor
ossimString getMagnifyFilterTypeAsString() const
virtual const ossim_float64 * getMaxPix() const
virtual void getFilterTypes(std::vector< ossimString > &filterTypes) const
static ossimString upcase(const ossimString &aString)
virtual ossim_uint32 getNumberOfBands() const
virtual double getSupport() const =0
ossimString getMinifyFilterTypeAsString() const
Represents serializable keyword/value map.
ossim_uint32 getXSupport() const
const char * find(const char *key) const
ossimDpt theInverseScaleFactor
ossim_uint32 height() const
static const char * SCALE_X_KW
bool contains(char aChar) const
ossim_float64 getBlurFactor() const
void setScaleFactor(const ossimDpt &scale)
const ossimIpt & ul() const
16 bit unsigned integer (14 bits used)
16 bit unsigned integer (13 bits used)
ossimFilter * theMagnifyFilter
void setBlurFactor(ossim_float64 blur)
unsigned short ossim_uint16
static const char * SCALE_Y_KW
void setFilterType(ossimFilterResamplerType filterType)
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
const double * getClosestWeights(const double &x, const double &y) const
Inlined below.
ossimFilterTable theFilterTable
const ossimFilter * getVerticalFilter() const
ossim_uint32 getWidth() const
signed short ossim_sint16
virtual ossim_uint32 getSizePerBand() const
Returns the number of pixels in a single band in a tile.
ossimString getFilterTypeAsString(ossimFilterResamplerType type) const
unsigned int ossim_uint32
virtual const ossim_float64 * getNullPix() const
32 bit normalized floating point
ossimFilterResamplerType theMagnifyFilterType
virtual ossimIrect getImageRectangle() const
ossimFilter * createNewFilter(ossimFilterResamplerType filterType, ossimFilterResamplerType &result)
ossim_uint32 getHeight() const
ossim_uint32 width() const
ossimFilterResamplerType getFilterType(const ossimString &type) const
static ossimPreferences * instance()
virtual const ossim_float64 * getMinPix() const
void setMinifyFilterType(const ossimString &minifyType)
void setMagnifyFilterType(const ossimString &magnifyType)
virtual void getKernelSupport(double &x, double &y) const
virtual ossimScalarType getScalarType() const
64 bit normalized floating point
16 bit unsigned integer (11 bits used)
ossimFilter * theMinifyFilter
ossim_uint32 getYSupport() const
void buildTable(ossim_uint32 filterSteps, const ossimFilter &filter)
Builds a table with filter being used in both x and y direction.
const ossimFilter * getHorizontalFilter() const
virtual const void * getBuf() const
virtual void resample(const ossimRefPtr< ossimImageData > &input, ossimRefPtr< ossimImageData > &output, const ossimDpt &ul, const ossimDpt &ur, const ossimDpt &deltaUl, const ossimDpt &deltaUr, const ossimDpt &length)
virtual ~ossimFilterResampler()
void resampleBilinearTile(T dummy, const ossimRefPtr< ossimImageData > &input, ossimRefPtr< ossimImageData > &output, const ossimIrect &outputSubRect, const ossimDpt &inputUl, const ossimDpt &inputUr, const ossimDpt &deltaUl, const ossimDpt &deltaUr, const ossimDpt &outLength)
unsigned char ossim_uint8
ossimFilterResamplerType theMinifyFilterType
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)
16 bit unsigned integer (12 bits used)
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)