/* // // INTeL CORPORATION PROPRIETARY INFORMATION // This software is supplied under the terms of a license agreement or // nondisclosure agreement with Intel Corporation and may not be copied // or disclosed except in accordance with the terms of that agreement. // Copyright (c) 1995 Intel Corporation. All Rights Reserved. // // // Purpose: IPL Misc Functions // */ #if !defined (__IPLMISC_H__) || defined (_OWN_BLDPCS) #define __IPLMISC_H__ #ifdef __cplusplus extern "C" { #endif /*========================================================================== Section: Memory Allocation Functions ==========================================================================*/ /*////////////////////////////////////////////////////////////////////////// // Name: iplMalloc, iplwMalloc, ipliMalloc, iplsMalloc, ipldMalloc // Purpose: Allocate memory aligned on 32 bytes // Returns: a pointer to an aligned memory block or NULL if no memory. // Parameters: length - size of required memory block in elements. // For iplMalloc length in bytes, for others a type of an // element depends on behalf of function (see type of return). // // Notes: The only function to free the memory allocated by any of // these functions is iplFree(). */ IPLAPI(void*, iplMalloc, (int length)) IPLAPI(short*, iplwMalloc,(int length)) IPLAPI(int*, ipliMalloc,(int length)) IPLAPI(float*, iplsMalloc,(int length)) IPLAPI(double*,ipldMalloc,(int length)) /* ///////////////////////////////////////////////////////////////////////// // Name: iplFree // Purpose: Frees memory allocated by one of the ipl?Malloc functions. // Returns: // Parameters: // // Notes: The function iplFree() cannot be used to free memory // allocated by standard functions like malloc() or calloc(). */ IPLAPI(void, iplFree, (void* ptr)) /*========================================================================== Section: Misc macros and definitions ==========================================================================*/ #define IPL_EPS (1.0E-12) #define IPL_PI (3.14159265358979324) /* ANSI C does not support M_PI */ #define IPL_2PI (6.28318530717958648) #define IPL_PI_2 (1.57079632679489662) #define IPL_PI_4 (0.785398163397448310) #define IPL_DegToRad(deg) ((deg)/180.0 * IPL_PI) #define IPLsDegToRad(deg) ((float) ((deg)/180.0 * IPL_PI)) #define IPLdDegToRad(deg) ((double)((deg)/180.0 * IPL_PI)) #ifndef MAX # define MAX(a,b) (((a) > (b)) ? (a) : (b)) #endif #ifndef MIN # define MIN(a,b) (((a) < (b)) ? (a) : (b)) #endif #ifndef FALSE # define FALSE 0 # define TRUE 1 #endif #define IPL_COPY_IMAGE_HEADER(src,dst,depth)\ dst = iplCreateImageHeader( src->nChannels, src->alphaChannel, \ depth, src->colorModel, src->channelSeq, src->dataOrder, \ src->origin, src->align, src->width, src->height, NULL, NULL, NULL, NULL) /* Notes: If you use macro definitions iplDecimateFit, iplZoomFit, or iplResizeFit, Please make sure that SRC and DST parameters aren't NULL */ #define iplResizeFit(SRC,DST,INTER)\ iplResize( SRC, DST, \ DST->roi ? DST->roi->width : DST->width, \ SRC->roi ? SRC->roi->width : SRC->width, \ DST->roi ? DST->roi->height : DST->height, \ SRC->roi ? SRC->roi->height : SRC->height, INTER ) #define iplDecimateFit(SRC,DST,INTER)\ iplDecimate( SRC, DST, \ DST->roi ? DST->roi->width : DST->width, \ SRC->roi ? SRC->roi->width : SRC->width, \ DST->roi ? DST->roi->height : DST->height, \ SRC->roi ? SRC->roi->height : SRC->height, INTER ) #define iplZoomFit(SRC,DST,INTER)\ iplZoom( SRC, DST, \ DST->roi ? DST->roi->width : DST->width, \ SRC->roi ? SRC->roi->width : SRC->width, \ DST->roi ? DST->roi->height : DST->height, \ SRC->roi ? SRC->roi->height : SRC->height, INTER ) /*F* // Name: iplRotateCenter // Purpose: rotates image about (xCenter, yCenter) on angle. // Context: macro // Returns: // Parameters: // srcImage The source image. // dstImage The resultant image. // interpolate The type of interpolation to perform for resampling // the input image. The following are currently supported. // IPL_INTER_NN Nearest neighbour interpolation. // IPL_INTER_LINEAR Linear interpolation. // IPL_INTER_CUBIC Cubic convolution interpolation. // IPL_SMOOTH_EDGE Smooth edges. Can be added to // interpolation by using bitwise logical OR. // angle The angle // xCenter The x coordinate of center // yCenter The y coordinate of center // Notes: *F*/ #define iplRotateCenter(srcImage, dstImage, angle, \ xCenter, yCenter, interpolate) \ { \ double xShift = 0, yShift = 0; \ iplGetRotateShift(xCenter, yCenter, angle, &xShift, &yShift); \ iplRotate(srcImage, dstImage, angle, xShift, yShift, interpolate); \ } /*---------------------- Code for channel sequence ----------------------*/ #define IPL_CSEQ_G 0x00000047 /* "G" */ #define IPL_CSEQ_GRAY 0x59415247 /* "GRAY" */ #define IPL_CSEQ_BGR 0x00524742 /* "BGR" */ #define IPL_CSEQ_BGRA 0x41524742 /* "BGRA" */ #define IPL_CSEQ_RGB 0x00424752 /* "RGB" */ #define IPL_CSEQ_RGBA 0x41424752 /* "RGBA" */ /*========================================================================== Section: Misc functions ==========================================================================*/ /* ///////////////////////////////////////////////////////////////////////// // Name: iplCheckImageHeader // Purpose: Checks image header // Returns: returns IPL_StsOk if header is valid, // else returns error status. // Parameters: image header // // Notes: */ IPLAPI ( IPLStatus, iplCheckImageHeader, ( const IplImage* hdr ) ) /*--------------------------- Library Version ---------------------------*/ #if !defined _OWN_BLDPCS typedef struct _IPLLibVersion { int major; /* e.g. 1 */ int minor; /* e.g. 00 */ int build; /* e.g. 01 */ const char * Name; /* e.g. "ipl6l.lib","iplm5.dll" */ const char * Version; /* e.g. "v1.00" */ const char * InternalVersion; /* e.g. "[1.00.01, 07/25/96]" */ const char * BuildDate; /* e.g. "Jun 1 96" */ const char * CallConv; /* e.g. "DLL","Microsoft*","Borland*"*/ } IPLLibVersion; #endif /* ///////////////////////////////////////////////////////////////////////// // Name: iplGetLibVersion // Purpose: // Returns: the structure of information about version of IPL library // Parameters: // // Notes: */ IPLAPI(const IPLLibVersion*, iplGetLibVersion,(void)) #ifdef __cplusplus } #endif #endif /* __IPLMISC_H__ */