JD2022-TU1/main/extern/Camcam/DLLInc/ccmap.h

405 lines
No EOL
14 KiB
C++

// 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