位图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函数的,给我留言,
- 位图bmp的API处理函数
- bmp位图的文件格式
- BMP位图的基本概念
- bmp位图的格式
- 在VB图像处理中BMP位图的详细说明
- 视频函数显示BMP位图
- bmp 位图的数据结构分析
- 数字图像处理之打开本地BMP位图
- 数字图像处理,bmp位图灰度化
- BMP格式知识之一:BMP位图文件的存储格式
- BMP位图文件的存储格式
- BMP位图文件的存储格式
- 位图的读取,PNG转化为BMP
- MFC透明位图(1)--BMP的实现
- BMP位图文件的存储格式
- MFC透明位图(1)--BMP的实现 .
- 位图BMP的计算机存储结构
- bmp位图和OpenGL的像素操作
- 《国际歌》
- SEO该如何看待Google更新
- 精品教程:通过 WebSphere Application Server Community Edition、DB2 Express-C 和 Eclipse 方便地使用数据库应用程序
- 通过js实现2个select控件的交换数据
- 王通:站内搜索引擎的SEO策略
- 位图bmp的API处理函数
- 特别推荐多媒体课堂: Rational 项目管理专题系列
- 数据库连接--DataSource连接方式-----研究中
- 用版本控制工具将数据库版本化
- MySQL语法语句大全
- 如何找到理想工作
- 如何找到理想工作
- 创建jar文件的一点注意
- Dbutils