// The following ifdef block is the standard way of creating macros which make exporting // from a DLL simpler. All files within this DLL are compiled with the CCMAP_API // symbol defined on the command line. this symbol should not be defined on any project // that uses this DLL. This way any other project whose source files include this file see // CCMAP_API functions as being imported from a DLL, whereas this DLL sees symbols // defined with this macro as being exported. #ifndef ___CCMAP_H___ #define ___CCMAP_H___ //#define CCMAP_DLL_MODE #ifndef _WINDOWS_ typedef long LONG; typedef struct tagPOINT { LONG x; LONG y; } POINT; typedef struct tagRECT { LONG left; LONG top; LONG right; LONG bottom; } RECT; #endif #ifdef CCMAP_DLL_MODE #ifdef CCMAP_EXPORTS #define CCMAP_API __declspec(dllexport) #else #define CCMAP_API __declspec(dllimport) #endif #else #define CCMAP_API #endif #ifndef __DEFINE_NUMS__ #define __DEFINE_NUMS__ #define f32 float #define u32 unsigned int #define s32 int #define u16 unsigned short #define s16 signed short #define u8 unsigned char #define s8 char #endif class CCMAP_API MAP { public: u32 PITCH; u32 SX,SY; u8 staticBase; MAP(); MAP(MAP *refMap); ~MAP(); s32 *GetBase(); void SetBase(s32 *_BASE); s32 GetValue(int pos); void SetValue(int pos, s32 Value); void MoveBase(s32 dec); u32 SetSize(u32 _PITCH, u32 _SY, u8 forceReset = 0); void Delete(); private: s32 *BASE; // <- Aligned base s32 *RealBASE; }; class CCMAP_API MAP8 { public: u32 PITCH; u32 SX,SY; u8 staticBase; MAP8(); ~MAP8(); u8 *GetBase(); void SetBase(u8 *_BASE); u8 GetValue(int pos); void SetValue(int pos, u8 Value); void MoveBase(s32 dec); u32 SetSize(u32 _PITCH, u32 _SY, u8 forceReset = 0); void Delete(); private: u8 *BASE; // <- Aligned base }; class CCMAP_API MAP16 { public: u32 PITCH; u32 SX,SY; u8 staticBase; MAP16(); ~MAP16(); s16 *GetBase(); void SetBase(s16 *_BASE); s16 GetValue(int pos); void SetValue(int pos, s16 Value); void MoveBase(s32 dec); u32 SetSize(u32 _PITCH, u32 _SY, u8 forceReset = 0); void Delete(); private: s16 *BASE; // <- Aligned base }; void CCMAP_API SWAPMAP(MAP *MapSRC,MAP *MapDST); void CCMAP_API ORb(MAP *MapSRC,MAP *MapDST); /* MAP Functions */ u32 CCMAP_API SAVEBMP(MAP *RefMap,char *Filename); void CCMAP_API COPY_O2_RGBA(MAP *MapSRC,MAP *MapDST); void CCMAP_API COPY_OX_RGBA(MAP *MapSRC,MAP *MapDST); void CCMAP_API COPY_II(MAP *MapSRC,MAP *MapDST); void CCMAP_API COPY_RESAMPLE(MAP *MapSRC,MAP *MapDST); s32 GET_AVERAGE(MAP *MapDST); void CCMAP_API ADD_VALUE(MAP *MapDST,s32 Value); void CCMAP_API ABS(MAP *MapDST); void CCMAP_API DETECT_EDGES(MAP *M, int tttr=-1, int radius=-1); void CCMAP_API SHIFT(MAP *MapDST,s32 SHIFT); void CCMAP_API II(MAP *CurrentMap); void CCMAP_API ABS_SUB(MAP *MapSRC,MAP *MapDST); void CCMAP_API SUB(MAP *MapSRC,MAP *MapDST); void CCMAP_API ADD(MAP *MapSRC,MAP *MapDST); void CCMAP_API COPY_O2(MAP *MapSRC,MAP *MapDST); void CCMAP_API WAVELET_0(MAP *MapDST); void CCMAP_API WAVELET_1(MAP *MapDST,MAP *MapDIFF); void CCMAP_API WAVELET_INTEGR(MAP *MapDST); void CCMAP_API FLIP_V(MAP *MapDST); void CCMAP_API ONLY_ABS(MAP *MapDST); void CCMAP_API ONLY_NABS(MAP *MapDST); void CCMAP_API SQR(MAP *MapDST); void CCMAP_API DETECT_EDGES(MAP *M); void CCMAP_API OFFSET(MAP *MapDST,s32 DX , s32 DY); void CCMAP_API NEG(MAP *MapDST); void CCMAP_API COPY_GRADIENT(MAP *MapSRC,MAP *MapDST); void CCMAP_API MAX(MAP *MapSRC,MAP *MapDST); void CCMAP_API MIN(MAP *MapSRC,MAP *MapDST); void CCMAP_API MAX_CROSS(MAP *MapSRC,MAP *MapDST); void CCMAP_API MIN_CROSS(MAP *MapSRC,MAP *MapDST); void CCMAP_API ERODE(MAP *MapSRC,MAP *MapDST); void CCMAP_API NON_ZERO(MAP *MapSRC,MAP *MapDST); void CCMAP_API AND(MAP *MapDST,s32 And); void CCMAP_API DrawLine(MAP *MapDST,float X1,float Y1,float X2,float Y2,u32 Color); void CCMAP_API DrawLine_Clip(MAP *MapDST,float X1,float Y1,float X2,float Y2,u32 Color); void CCMAP_API DrawQuad(MAP *MapDST,s32 X1,s32 Y1,s32 X2,s32 Y2,u32 Color,u32 Ep); void CCMAP_API DrawQuadFull(MAP *MapDST,s32 X1,s32 Y1,s32 X2,s32 Y2,u32 Color); void CCMAP_API DrawPointFull(MAP *MapDST,s32 X1,s32 Y1,u32 Size,u32 Color); void CCMAP_API DrawQuad_R(MAP *MapDST,s32 X1,s32 Y1,s32 X2,s32 Y2,u32 Color,u32 Ep,float Alpha); void CCMAP_API DrawEllipse(MAP *MapDST,s32 X,s32 Y,class Vector *pBig,float SmallFactor,u32 Color); void CCMAP_API DrawCircle(MAP *MapDST,s32 X,s32 Y,s32 Radius,u32 Color,u32 Ep); void CCMAP_API MIX(MAP *MapSRC,MAP *MapDST); void CCMAP_API COPY(MAP *MapSRC,MAP *MapDST); void CCMAP_API SET(MAP *MapDST,s32 Value); void CCMAP_API FLIP_H(MAP *MapDST); void CCMAP_API COPY_BW(MAP *MapSRC,MAP *MapDST); void CCMAP_API COPY_RGBA(MAP *MapSRC,MAP *MapDST); void CCMAP_API COPY_O2(MAP *MapSRC,MAP *MapDST); void CCMAP_API DARKER(MAP *MapDST); void CCMAP_API LF_GaussianFilter(MAP *MapSRCConst,MAP *MapDST,MAP *MapSRC,int Radius,int Derviv); u32 CCMAP_API GET_MARKER(MAP *Map); void CCMAP_API SET_BORDER(MAP *MapSRC,s32 Size,s32 Value); #define MAP32_GET_AVERAGE GET_AVERAGE #define MAP32_ADD_VALUE ADD_VALUE #define MAP32_ABS ABS #define MAP32_DETECT_EDGES DETECT_EDGES #define MAP32_SHIFT SHIFT #define MAP32_II II #define MAP32_ABS_SUB ABS_SUB #define MAP32_SUB SUB #define MAP32_ADD ADD #define MAP32_COPY_O2 COPY_O2 #define MAP32_WAVELET_0 WAVELET_0 #define MAP32_WAVELET_1 WAVELET_1 #define MAP32_WAVELET_INTEGR WAVELET_INTEGR #define MAP32_FLIP_V FLIP_V #define MAP32_ONLY_ABS ONLY_ABS #define MAP32_ONLY_NABS ONLY_NABS #define MAP32_SQR SQR #define MAP32_DETECT_EDGES DETECT_EDGES #define MAP32_OFFSET OFFSET #define MAP32_NEG NEG #define MAP32_COPY_GRADIENT COPY_GRADIENT #define MAP32_MAX MAX #define MAP32_MIN MIN #define MAP32_MAX_CROSS MAX_CROSS #define MAP32_MIN_CROSS MIN_CROSS #define MAP32_ERODE ERODE #define MAP32_NON_ZERO NON_ZERO #define MAP32_AND AND #define MAP32_DrawLine DrawLine #define MAP32_DrawLine_Clip DrawLine_Clip #define MAP32_DrawQuad DrawQuad #define MAP32_DrawQuadFull DrawQuadFull #define MAP32_DrawPointFull DrawPointFull #define MAP32_DrawQuad_R DrawQuad_R #define MAP32_DrawEllipse DrawEllipse #define MAP32_DrawCircle DrawCircle #define MAP32_MIX MIX #define MAP32_COPY COPY #define MAP32_SET SET #define MAP32_FLIP_H FLIP_H #define MAP32_COPY_BW COPY_BW #define MAP32_COPY_RGBA COPY_RGBA #define MAP32_COPY_O2 COPY_O2 #define MAP32_DARKER DARKER #define MAP32_LF_GaussianFilter LF_GaussianFilter #define MAP32_GET_MARKER GET_MARKER #define MAP32_SET_BORDER SET_BORDER #define MAP_GENERIC_T(MapSRC,typeof,function)\ {\ for (int YYY = 0;YYY < MapSRC->SY;YYY++)\ {\ int XXX = 0;\ typeof *Pixel = MapSRC->GetBase() + YYY * MapSRC->PITCH;\ typeof *PixelLast = Pixel + MapSRC->SX;\ while (Pixel < PixelLast)\ {\ function;\ Pixel++;\ XXX++;\ }\ Pixel += MapSRC->PITCH - MapSRC->SX;\ }\ } #define MAP_GENERIC(MapSRC,function) MAP_GENERIC_T(MapSRC,PIXELMAPTYPE,function) #define MAP_GENERIC2(MapSRC,MapDST,function)\ {\ int MAXY = MapSRC->SY > MapDST->SY ? MapDST->SY : MapSRC->SY;\ int MAXX = MapSRC->SX > MapDST->SX ? MapDST->SX : MapSRC->SX;\ for (int YYY = 0;YYY < MAXY;YYY++)\ {\ int XXX = 0;\ PIXELMAPTYPE *PixelSRC = MapSRC->GetBase() + YYY * MapSRC->PITCH;\ PIXELMAPTYPE *PixelDST = MapDST->GetBase() + YYY * MapDST->PITCH;\ PIXELMAPTYPE *PixelLast = PixelSRC + MAXX;\ while (PixelSRC < PixelLast)\ {\ function;\ PixelSRC++;\ PixelDST++;\ XXX++;\ }\ PixelSRC += MapSRC->PITCH - MAXX;\ PixelDST += MapDST->PITCH - MAXX;\ }\ } void CCMAP_API MAP32_BLUR_Inplace(MAP *pSrc, u32 Rpo2 , u32 Iteration); void CCMAP_API MAP32_BLUR_V_Inplace(MAP *pSrc,u32 Rpo2); void CCMAP_API MAP32_BLUR_H_Inplace(MAP *pSrc,u32 Rpo2); /* MAP16 Functions */ void CCMAP_API MAP16_BLUR_Inplace(MAP16 *pSrc, u32 Rpo2 , u32 Iteration); void CCMAP_API MAP16_Copy(MAP16 *pSrc,MAP16 *pDst); void CCMAP_API MAP16_CopySqr8(MAP8 *pSrc,MAP16 *pDst); void CCMAP_API MAP16_BLUR_H_Inplace(MAP16 *pSrc,u32 Rpo2); void CCMAP_API MAP16_BLUR_V_Inplace(MAP16 *pSrc,u32 Rpo2); void CCMAP_API MAP16_Denoise_Inplace_FAST(MAP16 *pSrc); void CCMAP_API MAP16_Sub(MAP16 *pSrc,MAP16 *pDst); void CCMAP_API MAP16_Add(MAP16 *pSrc,MAP16 *pDst); void CCMAP_API MAP16_Add(MAP16 *pSrc,s16 Value); void CCMAP_API MAP16_And(MAP16 *pSrc,s16 Value); void CCMAP_API MAP16_And(MAP16 *pSrc,MAP16 *pDst); void CCMAP_API MAP16_Or(MAP16 *pSrc,s16 Value); void CCMAP_API MAP16_Abs(MAP16 *pSrc); void CCMAP_API MAP16_OnlyAbs(MAP16 *MapSRC); void CCMAP_API MAP16_Or(MAP16 *pSrc,MAP16 *pDst); void CCMAP_API MAP16_Xor(MAP16 *pSrc,s16 Value); void CCMAP_API MAP16_Set(MAP16 *pSrc,s16 Value); void CCMAP_API MAP16_Mul(MAP16 *MapSRC,MAP16 *MapDST); void CCMAP_API MAP16_Sqr(MAP16 *MapSRC); void CCMAP_API MAP16_Sqrt(MAP16 *MapSRC); void CCMAP_API MAP16_Div(MAP16 *pSrc,MAP16 *pDst,s16 Delta); void CCMAP_API MAP16_BLUR_XY(MAP16 *pSrc,MAP16 *pTmp,u8 Alpha, u32 Rpo2 , u32 Iteration); void CCMAP_API MAP16_Shift(MAP16 *MapSRC,s16 Value); void CCMAP_API MAP16_Limit_UP(MAP16 *MapSRC,s16 UpperValue); void CCMAP_API MAP16_Limit_Down(MAP16 *MapSRC,s16 LowestValue); void CCMAP_API MAP16_Denoise_FAST(MAP16 *pSrc,MAP16 *pDst); void CCMAP_API MAP16_SmallBlur_FAST(MAP16 *pSrc,MAP16 *pDst); void CCMAP_API MAP16_BLUR_ScissorX_Inplace(MAP16 *pSrc,s32 FactorX,s32 InvertOrigin = 0); void CCMAP_API SET_BORDER16(MAP16 *MapSRC,s32 Size,s16 Value); void CCMAP_API MAP16_BLUR_CopyTranspose(MAP16 *pSrc,MAP16 *pDst); void CCMAP_API MAP16_ShiftLine(s16 *pSrc,s32 Shift,s32 Lenght); u32 CCMAP_API MAP_2_MAP16(MAP *MapSRC,MAP16 *MapDST,u32 Shift = 19); void CCMAP_API MAP16_2_MAP(MAP16 *MapSRC,MAP *MapDST,u32 Shift); void CCMAP_API MAP16_DX(MAP16 *MapSRC); void CCMAP_API MAP16_DY(MAP16 *MapSRC); void CCMAP_API MAP16_XO2(MAP16 *MapDST); void CCMAP_API MAP16_YO2(MAP16 *MapDST); void CCMAP_API MAP16_YE2(MAP16 *MapDST); void CCMAP_API MAP16_XE2(MAP16 *MapDST) ; void CCMAP_API MAP16_Copy_O2(MAP16 *MapSRC,MAP16 *MapDST) ; void CCMAP_API MAP16_XOffset(MAP16 *MapDST,s32 offset); void CCMAP_API MAP16_HalfXOffset(MAP16 *MapDST); void CCMAP_API MAP16_FLIP_H(MAP16 *MapDST); void CCMAP_API MAP16_FLIP_V(MAP16 *MapDST); void CCMAP_API MAP16_CopyFlipV(MAP16 *MapSRC,MAP16 *MapDST); void CCMAP_API MAP16_CopyFlipH(MAP16 *MapSRC,MAP16 *MapDST); void CCMAP_API MAP16_BLUR_CopyTransposeFAST(MAP16 *pSrc,MAP16 *pDst); void CCMAP_API MAP16_Copy8(MAP8 *pSrc,MAP16 *pDst); /* MAP32 Functions */ void CCMAP_API MAP32_BLUR_Inplace(MAP *pSrc, u32 Rpo2 , u32 Iteration); void CCMAP_API MAP32_Copy(MAP *pSrc,MAP *pDst); void CCMAP_API MAP32_CopySqr8(MAP8 *pSrc,MAP *pDst); void CCMAP_API MAP32_BLUR_H_Inplace(MAP *pSrc,u32 Rpo2); void CCMAP_API MAP32_BLUR_V_Inplace(MAP *pSrc,u32 Rpo2); void CCMAP_API MAP32_Denoise_Inplace_FAST(MAP *pSrc); void CCMAP_API MAP32_Sub(MAP *pSrc,MAP *pDst); void CCMAP_API MAP32_Add(MAP *pSrc,MAP *pDst); void CCMAP_API MAP32_Add(MAP *pSrc,s32 Value); void CCMAP_API MAP32_And(MAP *pSrc,s32 Value); void CCMAP_API MAP32_And(MAP *pSrc,MAP *pDst); void CCMAP_API MAP32_Or(MAP *pSrc,s32 Value); void CCMAP_API MAP32_Abs(MAP *pSrc); void CCMAP_API MAP32_OnlyAbs(MAP *MapSRC); void CCMAP_API MAP32_Or(MAP *pSrc,MAP *pDst); void CCMAP_API MAP32_Xor(MAP *pSrc,s32 Value); void CCMAP_API MAP32_MaxValue(MAP *pSrc,s32 Value); void CCMAP_API MAP32_Set(MAP *pSrc,s32 Value); void CCMAP_API MAP32_Mul(MAP *MapSRC,MAP *MapDST); void CCMAP_API MAP32_Sqr(MAP *MapSRC); void CCMAP_API MAP32_Sqrt(MAP *MapSRC); void CCMAP_API MAP32_Div(MAP *pSrc,MAP *pDst,s32 Delta); void CCMAP_API MAP32_BLUR_XY(MAP *pSrc,MAP *pTmp,u8 Alpha, u32 Rpo2 , u32 Iteration); void CCMAP_API MAP32_Shift(MAP *MapSRC,s32 Value); void CCMAP_API MAP32_Limit_UP(MAP *MapSRC,s32 UpperValue); void CCMAP_API MAP32_Limit_Down(MAP *MapSRC,s32 LowestValue); void CCMAP_API MAP32_Denoise_FAST(MAP *pSrc,MAP *pDst); void CCMAP_API MAP32_SmallBlur_FAST(MAP *pSrc,MAP *pDst); void CCMAP_API MAP32_BLUR_ScissorX_Inplace(MAP *pSrc,s32 FactorX,s32 InvertOrigin = 0); void CCMAP_API SET_BORDER16(MAP *MapSRC,s32 Size,s32 Value); void CCMAP_API MAP32_BLUR_CopyTranspose(MAP *pSrc,MAP *pDst); void CCMAP_API MAP32_ShiftLine(s32 *pSrc,s32 Shift,s32 Lenght); void CCMAP_API MAP32_2_MAP(MAP *MapSRC,MAP *MapDST,u32 Shift = 19); u32 CCMAP_API MAP_2_MAP32(MAP *MapSRC,MAP *MapDST,u32 Shift = 19); void CCMAP_API MAP32_DX(MAP *MapSRC); void CCMAP_API MAP32_DY(MAP *MapSRC); void CCMAP_API MAP32_XO2(MAP *MapDST); void CCMAP_API MAP32_YO2(MAP *MapDST); void CCMAP_API MAP32_YE2(MAP *MapDST); void CCMAP_API MAP32_XE2(MAP *MapDST) ; void CCMAP_API MAP32_Copy_O2(MAP *MapSRC,MAP *MapDST) ; void CCMAP_API MAP32_XOffset(MAP *MapDST,s32 offset); void CCMAP_API MAP32_HalfXOffset(MAP *MapDST); void CCMAP_API MAP32_FLIP_H(MAP *MapDST); void CCMAP_API MAP32_FLIP_V(MAP *MapDST); void CCMAP_API MAP32_CopyFlipV(MAP *MapSRC,MAP *MapDST); void CCMAP_API MAP32_CopyFlipH(MAP *MapSRC,MAP *MapDST); void CCMAP_API MAP32_BLUR_CopyTransposeFAST(MAP *pSrc,MAP *pDst); void CCMAP_API MAP32_Copy8(MAP8 *pSrc,MAP *pDst); /* MAP8 functions */ void CCMAP_API MAP_2_MAP8(MAP *pSrc,/*OUT*/MAP8 *pDst,/*IN*/u8 *pTempBuffer); void CCMAP_API MAP8_2_MAP(/*IN*/MAP8 *pSrc,MAP *pDst); void CCMAP_API SET_BORDER8(MAP8 *MapSRC,s32 Size,u8 Value); void CCMAP_API MAP8_BLUR8_H_Inplace(MAP8 *pSrc,u32 Rpo2); void CCMAP_API MAP8_BLUR8_V_Inplace(MAP8 *pSrc,u32 Rpo2); void CCMAP_API MAP8_COMPUTEO2(MAP8 *pSrc,MAP8 *pDst); void CCMAP_API ExtractPoint(MAP8 *MapDST,float X,float Y,float *Dest); float CCMAP_API GetLineError(MAP8 *MapDST,float X1,float Y1,float X2,float Y2,float *Coefs,u32 Number); void CCMAP_API ADD_NOISE(MAP *MapDST); /************************************************************************************/ /** MAP DRAW FUNCTIONS **************************************************************/ /************************************************************************************/ void CCMAP_API DrawCross(MAP *image, POINT p, u32 color, int len, char orient = 3); void CCMAP_API DrawRect(MAP *image, RECT r, u32 color); void CCMAP_API DrawLineAddBW(MAP *MapDST,s32 X1,s32 Y1,s32 X2,s32 Y2, u32 Color); void CCMAP_API DRawTEXT(u8 *pTEXT,u32 *pBase,s32 X, s32 Y, s32 Pitch , u32 Height , u32 Color , u32 X2 = 0 , u32 Y2 = 0, u32 BackColor = 0 ); #endif