位图bmp的API处理函数

来源:互联网 发布:防毒面具 淘宝 编辑:程序博客网 时间:2024/05/17 22:10

/**********************************************************************************  

*Visual C++数字图像处理获取 处理及实践应用

*      杨枝灵  王开 等 编著*          ---人民邮电出版社

*Eric,szu,08.5.11

************************************************************************************/ #ifndef _GLOBAL_API

#define _GLOBAL_API

#include <math.h>

#include "cdib.h"

#include "ColorTable.h"

#include <complex> using namespace std;

DECLARE_HANDLE(HDIB);

//#define IS_WIN30_DIB(lpbi)  ((*(LPDWORD)(lpbi))==sizeof(BITMAPINFOHEADER))

//#define RECTWIDTH(lpRect)     ((lpRect)->right - (lpRect)->left)

//#define RECTHEIGHT(lpRect)    ((lpRect)->bottom - (lpRect)->top)

#define WIDTHBYTES(bits)    (((bits) + 31) / 32 * 4)        //求实际存储的每行字节数

 //----------------------------------------------------------------------

// DIB处理函数BOOL DIBShow(CFile* pFile);

BOOL ConvertDDBToDIB(HBITMAP hBitmap, CDib* pDibDest, HPALETTE hPal); //

BOOL CopyDIB(CDib* pDibSrc, CDib* pDibDst);

BOOL CopyScreenToDIB(LPRECT lpRect, CDib* pDibDest);

HPALETTE GetSystemPalette() ;

HPALETTE CopyPalette(HPALETTE hPalSrc);

BOOL ReadDIB(CFile* pFile, LPBITMAPINFOHEADER lpBMIH, LPBYTE lpImage);

BOOL WINAPI Gradient(LPSTR lpDIB);//Eric,szu,08.5.18

BOOL WINAPI ThresholdTrans(LPSTR lpDIBBits, LONG lWidth, LONG lHeight, BYTE bThre);//Eric,szu,08.5.17

HGLOBAL WINAPI CopyHandle (HGLOBAL h);//Eric,szu,08.5.17

BOOL WINAPI ConvertToGrayScale(LPSTR lpDIB);//Eric,szu,08.5.17

HDIB WINAPI NewDIB(long width, long height,unsigned short biBitCount);//Eric,szu,08.5.12

HDIB WINAPI ReadDIBFile(CFile& file);//Eric,szu,08.5.12

LPSTR WINAPI FindDIBBits(LPSTR lpbi);//Eric,szu,08.5.12

HDIB WINAPI CropDIB(HDIB hDIB, LPRECT lpRect);//Eric,szu,08.5.17

DWORD BytesPerLine(LPBYTE lpDIB) ;//Eric,szu,08.5.17

BOOL WINAPI CreateDIBPalette(HDIB hDIB, CPalette* pPal);//Eric,szu,08.5.17

HPALETTE MakeDIBPalette(LPVOID lpvColorTable,  LPBITMAPINFOHEADER lpBMIH);

BOOL PaintDIB(CDC* pDC, LPBITMAPINFOHEADER lpBMIH, LPBYTE lpImage, CPoint origin, CSize size, HPALETTE hPalette);

BOOL WINAPI PaintDIB(HDC hDC,LPRECT lpDCRect,HDIB hDIB,LPRECT lpDIBRect,CPalette* pPal);

DWORD WINAPI DIBWidth(LPSTR lpDIB);//Eric,szu,08.5.12DWORD WINAPI DIBHeight(LPSTR lpDIB);//Eric,szu,08.5.12

WORD  WINAPI  PaletteSize (LPSTR lpbi);WORD WINAPI DIBNumColors(LPSTR lpb);//Eric,szu,08.5.12//

----------------------------------------------------------------------

// 运动检测

BOOL GetBackground(CString strFilePath, int nTotalFrameNum, int nImageWidth,      int nImageHeight, unsigned char* pUnchBackGround);

BOOL LoadDibSeq(CString strFilePath, int nCurFrameNum, int nTotalFrameNum, CDib* pDib);

CString GetFileName(CString strFilePathName, int nCurFrameNum);

void BinaFrameDiff(unsigned char *pUnchImg1, unsigned char *pUnchImg2,     int nWidth, int nHeight, unsigned char * pUnchResult,    int nThreshold=10);

void ErodeFrameDiff(unsigned char *pUnchImg, int nWidth, int nHeight, int nErodeHalfWin,     int nErodeThreshold, unsigned char *pUnchResult);

//----------------------------------------------------------------------

// 图象分割

void RegionSegFixThreshold(CDib * pDib, int nThreshold=100);

void RobertsOperator(CDib * pDib, double * pdGrad);

void LaplacianOperator(CDib * pDib, double * pdGrad);

void EdgeTrack(CDib * pDib, unsigned char * pUnEdgeTrack);

void RegionGrow(CDib * pDib, unsigned char * pUnRegion, int nThreshold = 10);

void RegionSegAdaptive(CDib * pDib) ;void SobelOperator(CDib * pDib, double * pdGrad);

void PrewittOperator(CDib * pDib, double * pdGrad); // canny 算子

void GaussianSmooth(unsigned char *pUnchImg, int nWidth, int nHeight, double sigma, unsigned char * pUnchSmthdImg);

void MakeGauss(double sigma, double **pdKernel, int *pnWindowSize) ;

 void DirGrad(unsigned char *pUnchSmthdImg, int nWidth, int nHeight,       int *pnGradX , int *pnGradY);

void GradMagnitude(int *pnGradX, int *pnGradY, int nWidth, int nHeight, int *pnMag) ; void NonmaxSuppress(int *pnMag, int *pnGradX, int *pnGradY, int nWidth, int nHeight, unsigned char *pUnchRst);

void EstimateThreshold(int *pnMag, int nWidth, int nHeight, int *pnThdHigh,int *pnThdLow,             unsigned char * pUnchEdge, double dRatioHigh, double dRationLow) ;

void Canny(unsigned char *pUnchImage, int nWidth, int nHeight, double sigma,      double dRatioLow, double dRatioHigh, unsigned char *pUnchEdge) ;

void Hysteresis(int *pnMag, int nWidth, int nHeight, double dRatioLow,         double dRatioHigh, unsigned char *pUnchEdge) ;

void TraceEdge (int y, int x, int nLowThd, unsigned char *pUnchEdge, int *pnMag, int nWidth) ;

// 小波变换函数原型

// Daubechies紧致正交小波基

// 不同支撑区间长度下的滤波器系数如下

const double hCoef[10][20] ={ { .707106781187,  .707106781187},  { .482962913145,  .836516303738,  .224143868042, -.129409522551 },  { .332670552950,  .806891509311,  .459877502118, -.135011020010, -.085441273882,  .035226291882 },  { .230377813309,  .714846570553,  .630880767930, -.027983769417,  -.187034811719,  .030841381836,  .032883011667, -.010597401785 },  { .160102397974,  .603829269797,  .724308528438,  .138428145901, -.242294887066,  -.032244869585,  .077571493840, -.006241490213, -.012580751999,  .003335725285 },  { .111540743350,  .494623890398,  .751133908021,  .315250351709, -.226264693965,  -.129766867567,  .097501605587,  .027522865530, -.031582039318,  .000553842201,   .004777257511, -.001077301085 },  { .077852054085,  .396539319482,  .729132090846,  .469782287405, -.143906003929,  -.224036184994,  .071309219267,  .080612609151, -.038029936935, -.016574541631,   .012550998556,  .000429577973, -.001801640704,  .000353713800 },  { .054415842243,  .312871590914,  .675630736297,  .585354683654, -.015829105256,  -.284015542962,  .000472484574,  .128747426620, -.017369301002, -.044088253931,   .013981027917,  .008746094047, -.004870352993, -.000391740373,  .000675449406,  -.000117476784 },  { .038077947364,  .243834674613,  .604823123690,  .657288078051,  .133197385825,  -.293273783279, -.096840783223,  .148540749338,  .030725681479, -.067632829061,   .000250947115,  .022361662124, -.004723204758, -.004281503682,  .001847646883,   .000230385764, -.000251963189,  .000039347320 },  { .026670057901,  .188176800078,  .527201188932,  .688459039454,  .281172343661,  -.249846424327, -.195946274377,  .127369340336,  .093057364604, -.071394147166,  -.029457536822,  .033212674059,  .003606553567, -.010733175483,  .001395351747,   .001992405295, -.000685856695, -.000116466855,  .000093588670, -.000013264203 }};

BOOL DWT_1D(double* pDbSrc, int nMaxLevel,int nDWTSteps, int nInv, int nStep, int nSupp);

BOOL DWTStep_1D(double* pDbSrc, int nCurLevel,int nInv, int nStep, int nSupp);

BOOL DWT_2D(double* pDbSrc, int nMaxWLevel, int nMaxHLevel, int nDWTSteps, int nInv, int nStep, int nSupp);

BOOL DWTStep_2D(double* pDbSrc, int nCurWLevel, int nCurHLevel, int nMaxWLevel, int nMaxHLevel, int nInv, int nStep, int nSupp); 

BOOL ImageDWT(LPBYTE lpImage, int nMaxWLevel, int nMaxHLevel,int nDWTSteps, int nInv, int nStep, int nSupp);

int Log2(int n);

BYTE FloatToByte(double f);

char FloatToChar(double f);

//----------------------------------------------------------------------

// 图象增强函数

BOOL GraySegLinTrans(CDib* pDib, int nX1, int nY1,       int nX2, int nY2); // 分段线性变换

BOOL HistogramEqualize(CDib* pDib);   // 直方图均衡化

BOOL  GeneralTemplate(CDib* pDib,  int nTempWidth, int nTempHeight,       int nTempCenX, int nTempCenY,      double* pdbTemp, double dbCoef); // 通用模板操作

BOOL MedianFilter(CDib* pDib,  int nTempWidth, int nTempHeight,      int nTempCenX, int nTempCenY);   // 中值滤波

HDIB MidFilter(HDIB hDIB,int tem_w,int tem_h);//Eric,szu,08.5.12

unsigned char  GetMedianValue(unsigned char * pUnchFltValue, int iFilterLen); // 获取中值

BOOL  ReplaceDIBColorTable(CDib* pDib, LPBYTE  pColorsTable);   // 替换DIB颜色表 void

LowPassFilterEnhance(LPBYTE lpImage, int nWidth, int nHeight, int nRadius) ;// 低通滤波

void HighPassFilterEnhance(LPBYTE lpImage, int nWidth, int nHeight, int nRadius);// 高通滤波

void ButterWorthLowPass(LPBYTE lpImage, int nWidth, int nHeight, int nRadius); //  ButterWorth低通滤波

void ButterWorthHighPass(LPBYTE lpImage, int nWidth, int nHeight, int nRadius); //  ButterWorth高通滤波

void LinearSharpen (LPBYTE lpImage, int nWidth, int nHeight);   //  线性锐化增强

BOOL WINAPI MedianFilter(LPSTR lpDIBBits, LONG lWidth, LONG lHeight,          int iFilterH, int iFilterW,          int iFilterMX, int iFilterMY);//Eric,szu,08.5.17unsigned char WINAPI GetMedianNum(unsigned char * bArray, int iFilterLen);//Eric,szu,08.5.17

//-----------------------------------------------------------------------

// imageview.cpp函数原型

BOOL LimbPatternBayer(CDib *pDib);BOOL DitherFloydSteinberg(CDib *pDib);

//--------------------------------------------------------------------------

// 图象分析函数原型

BOOL DIBHOLENUMBER(CDib *pDib);BOOL DIBMOMENT(CDib *pDib);

BOOL DIBBARYCENTERMOMENT(CDib *pDib);

BOOL DIBFREAMEWORK(CDib *pDib);

BOOL DIBCHESSBOARDDISRESTORE(CDib *pDib);

BOOL DIBSTREETDIS(CDib *pDib);

BOOL DIBOUTLINE(CDib *pDib);BOOL WINAPI DIBTrace(CDib *pDib);

//-------------------------------------------------------------------------------------

// 图象变换函数原型

VOID WINAPI FFT_1D(complex<double> * pCTData, complex<double> * pCFData, int nLevel);

VOID WINAPI IFFT_1D(complex<double> * pCFData, complex<double> * pCTData, int nLevel);

VOID WINAPI IFFT_2D(complex<double> * pCFData, complex<double> * pCTData, int nWidth, int nHeight);

VOID WINAPI IDFT_2D(CDib * pDib,double * pTrRstRpart, double * pTrRstIpart);

VOID WINAPI WINAPI DCT(double *f, double *F, int power);

VOID WINAPI WALSH(double *f, double *F, int r);

VOID WINAPI IWALSH(double *F, double *f, int r);

BOOL WINAPI THREECROSS(double *Matrix, int Rank, double *QMatrix, double *MainCross, double *HypoCross);

BOOL WINAPI BSTQ(int Rank, double *MainCross, double *HypoCross, double *Matrix, double Eqs, int MaxT);

BOOL WINAPI DIBDct(CDib *pDib);BOOL WINAPI DIBWalsh(CDib *pDib);

BOOL WINAPI DIBHOTELLING(CDib *pDib);VOID WINAPI DIBDFT_2D(CDib * pDib,double * pTrRstRpart, double * pTrRstIpart);

VOID WINAPI DIBFFT_2D(complex<double> * pCTData, int nWidth, int nHeight, complex<double> * pCFData);

//------------------------------------------------------------------------------------

// 图象复原的函数原型

BOOL WINAPI DIBNoRestriction(CDib *pDib );

BOOL WINAPI DIBInverseFilter (CDib *pDib);

BOOL WINAPI DIBNoiseDegeneration (CDib *pDib);

BOOL WINAPI DIBWinnerFilter (CDib *pDib);BOOL

WINAPI DIBMotionDegeneration(CDib *pDib);BOOL WINAPI DIBMotionRestore(CDib *pDib);

//-------------------------------------------------------------------------------------

// 图象编码函数原型

BOOL WINAPI WRITE2IMG(CDib * pDib, CFile& file);

BOOL WINAPI LOADIMG(CDib * pDib, CFile& file);

BOOL WINAPI DIBBITPLANE(CDib *pDib,BYTE bBitNum);#endif

在需要此API函数的,给我留言,