// This file is part of FexGenericFilter and (C) 2006 by Hajo Krabbenhöft (tentacle) // All rights reserved but the aegisub project is allowed to use it. #include "stdio.h" #include "math.h" #include "memory.h" #include "FexGenericFilter_Include.h" void BaseFloatImage_Filter( float* in, int inSx, int inSy, FexFilter* filter, float* out, int outSx, int outSy ) { #define FilterWidth (filter->Width) #define FilterWeight(t) (filter->Filter(t)) float* tmp = new float[outSx*inSy]; #include "FexGenericFilter_BaseFloatImageApply.h" delete []tmp; #undef FilterWidth #undef FilterWeight } void BaseFloatImage_FilterSeperate( float* in, int inSx, int inSy, FexFilter* filterX, FexFilter* filterY, float* out, int outSx, int outSy ) { float* tmp = new float[outSx*inSy]; #define FilterWidth (filterX->Width) #define FilterWeight(t) (filterX->Filter(t)) #define FILTER_NO_Y #include "FexGenericFilter_BaseFloatImageApply.h" #undef FilterWidth #undef FilterWeight #undef FILTER_NO_Y #define FilterWidth (filterY->Width) #define FilterWeight(t) (filterY->Filter(t)) #define FILTER_NO_X #include "FexGenericFilter_BaseFloatImageApply.h" #undef FilterWidth #undef FilterWeight #undef FILTER_NO_X delete []tmp; } void BaseFloatImage_GaussEdgeDetect( float* Img, int sizx, int sizy, float sigma, float* GradX, float* GradY ) { FexFilter_Gauss gauss (sigma); FexFilter_GaussDerivation gaussDeriv (sigma); BaseFloatImage_FilterSeperate( Img, sizx, sizy, &gaussDeriv, &gauss, GradX, sizx, sizy ); BaseFloatImage_FilterSeperate( Img, sizx, sizy, &gauss, &gaussDeriv, GradY, sizx, sizy ); } void BaseFloatImage_GaussSmooth( float* Img, int sizx, int sizy, float sigma, float* Out ) { FexFilter_Gauss gauss (sigma); BaseFloatImage_Filter( Img, sizx,sizy, &gauss, Out, sizx, sizy ); } #include inline double sinc( double x ) { x *= 3.1415; if( x != 0 ) return( sin(x) / x ); return( 1.0 ); } inline double RescaleFilter( double t ) { if( t < 0 ) t = -t; if( t < 3.0 ) return( sinc(t) * sinc(t/3.0) ); return( 0.0 ); } void BaseFloatImage_LanczosRescale( float* in, int inSx, int inSy, float* out, int outSx, int outSy ) { #define FilterWidth (3) #define FilterWeight(t) (RescaleFilter(t)) float* tmp = new float[outSx*inSy]; #include "FexGenericFilter_BaseFloatImageApply.h" delete []tmp; #undef FilterWidth #undef FilterWeight }