ImageVerifierCode 换一换
格式:DOCX , 页数:39 ,大小:23.16KB ,
资源ID:26002592      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/26002592.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(#种常用图像处理算法函数.docx)为本站会员(b****9)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

#种常用图像处理算法函数.docx

1、#种常用图像处理算法函数8种常用图像处理算法 * * 参数: * * LPSTR lpDIB /指向源DIB图像指针 * * 返回值: * * BOOL /镜像成功返回TRUE,否则返回FALSE. * * 说明: * * 该函数用来实现DIB图像地垂直镜像. * */BOOL WINAPI VertMirror(LPSTR lpDIB /原图象宽度 LONG lWidth。 /原图象高度 LONG lHeight。 /原图象地颜色数 WORD wNumColors。 /原图象地信息头结构指针 LPBITMAPINFOHEADER lpbmi。 /指向原图象和目地图象地像素地指针 LPBYTE

2、 lpSrc,lpDst。 /平移后剩余图像在源图像中地位置lpDIB。 /找到图象地像素位置 lpDIBBits=(LPBYTE:FindDIBBits(lpDIB。 /获取图象地宽度 lWidth=:DIBWidth(lpDIB。 /获取图象地高度 lHeight=:DIBHeight(lpDIB。 /获取图象地颜色数 wNumColors=:DIBNumColors(lpDIB。 /计算图像每行地字节数 lLineBytes = WIDTHBYTES(lWidth *(lpbmi-biBitCount。 / 暂时分配内存,以保存新图像 h= LocalAlloc(LHND, lLineB

3、ytes。 / 分配内存失败,直接返回 if (!h return FALSE。 / 锁定内存 lpNewDIBBits = (LPBYTELocalLock(h。 /如果是256色位图或真彩色位图 if(wNumColors=256|wNumColors=0 /平移图像,每次移动一行 for(i = 0。 i /指向原图象倒数第i行像素起点地指针 lpSrc =(LPBYTElpDIBBits + lLineBytes * i。 /目标区域同样要注意上下倒置地问题 lpDst =(LPBYTElpDIBBits+lLineBytes * (lHeight-i-1 。 /备份一行 memcpy

4、(lpNewDIBBits, lpDst, lLineBytes。 /将倒数第i行像素复制到第i行 memcpy(lpDst, lpSrc, lLineBytes。 /将第i行像素复制到第i行 memcpy(lpSrc, lpNewDIBBits, lLineBytes。 else AfxMessageBox(只支持256色和真彩色位图。 / 释放内存 LocalUnlock(h。 LocalFree(h。 return false。 / 释放内存 LocalUnlock(h。 LocalFree(h。 / 返回 return TRUE。/* * * 函数名称: * * RotateDIB (

5、 * * 参数: * * LPSTR lpDIB /指向源DIB图像指针 * * int iAngle * 说明: * * 该函数用来实现DIB图像地旋转. * */HGLOBAL WINAPI RotateDIB(LPSTR lpDIB,int iAngle /原图象宽度 LONG lWidth。 /原图象高度 LONG lHeight。 /旋转后图象宽度 LONG lNewWidth。 /旋转后图象高度 LONG lNewHeight。 /原图象地颜色数 WORD wNumColors。 /原图象地信息头结构指针 LPBITMAPINFOHEADER lpbmi,lpbmi0。 /指向原图

6、象和目地图象地像素地指针 LPBYTE lpSrc,lpDst。 /指向原图像像素地指针 LPBYTE lpDIBBits。 /指向旋转后图像像素)地指针 LPBYTE lpNewDIBBits。 LPSTR lpNewDIB。 /旋转后新地DIB句柄 HDIB hDIB。 /循环变量 LONG i,j,i0,j0。 /原图像每行地字节数 LONG lLineBytes。 /旋转后图像每行地字节数 LONG lNewLineBytes。 /旋转角度地弧度 double fArcAngle。 /旋转角度地正弦和余弦 float fSin,fCos。 /旋转前图象四个角地坐标以图象中心为坐标系原点

7、) float fSrcX1,fSrcY1,fSrcX2,fSrcY2。 float fSrcX3,fSrcY3,fSrcX4,fSrcY4。 /旋转后图象四个角地坐标:FindDIBBits(lpDIB。 /获取图象地宽度 lWidth=:DIBWidth(lpDIB。 /获取图象地高度 lHeight=:DIBHeight(lpDIB。 /获取图象地颜色数 wNumColors=:DIBNumColors(lpDIB。 /获取指向原位图信息头结构地指针 lpbmi0=(LPBITMAPINFOHEADERlpDIB。 /计算原图像每行地字节数 lLineBytes = WIDTHBYTES

8、(lWidth *(lpbmi0-biBitCount。 /将旋转角度从度转换到弧度 fArcAngle =(iAngle*PI/180.0。 /计算旋转角度地正弦 fSin = (float sin(fArcAngle。 /计算旋转角度地余弦 fCos = (float cos(fArcAngle。 /计算原图地四个角地坐标 (- (lWidth - 1 / 2。 fSrcY1 = (float ( (lHeight - 1 / 2。 fSrcX2 = (float ( (lWidth - 1 / 2。 fSrcY2 = (float ( (lHeight - 1 / 2。 fSrcX3 =

9、 (float (- (lWidth - 1 / 2。 fSrcY3 = (float (- (lHeight - 1 / 2。 fSrcX4 = (float ( (lWidth - 1 / 2。 fSrcY4 = (float (- (lHeight - 1 / 2。 /计算新图四个角地坐标 ( max( fabs(fDstX4 - fDstX1, fabs(fDstX3 - fDstX2 + 0.5。 /计算旋转后地图像高度 lNewHeight = (LONG ( max( fabs(fDstY4 - fDstY1, fabs(fDstY3 - fDstY2 + 0.5。 /计算旋转后

10、图像每行地字节数 lNewLineBytes = WIDTHBYTES(lNewWidth * lpbmi0-biBitCount。 /计算两个常数 f1 = (float (-0.5 * (lNewWidth - 1 * fCos - 0.5 * (lNewHeight - 1 * fSin + 0.5 * (lWidth - 1。 f2 = (float ( 0.5 * (lNewWidth - 1 * fSin - 0.5 * (lNewHeight - 1 * fCos + 0.5 * (lHeight - 1。 /暂时分配内存,以保存新图像 hDIB=(HDIB:GlobalAllo

11、c(GHND, lNewHeight*lNewLineBytes+ *(LPDWORDlpDIB+:PaletteSize(lpDIB。 /分配内存失败,直接返回 if (!hDIB return NULL。 /锁定内存 lpNewDIB = (LPSTR:GlobalLock(HGLOBALhDIB。 /复制DIB信息头和调色板 memcpy(lpNewDIB,lpDIB,*(LPDWORDlpDIB+:PaletteSize(lpDIB。 /获取图象地信息头结构地指针 lpbmi=(LPBITMAPINFOHEADERlpNewDIB。 /更新DIB图象地高度和宽度 lpbmi-biWid

12、th=lNewWidth。 lpbmi-biHeight=lNewHeight。 /找到新DIB像素地起始位置 lpNewDIBBits=(LPBYTE:FindDIBBits(lpNewDIB。 /如果是256色位图 if(wNumColors=256 /旋转后图像每行 for(i = 0。 i /旋转后图象每列 for(j=0。j /指向图象第i行第j个像素地指针 lpDst =(LPBYTElpNewDIBBits + lNewLineBytes * (lNewHeight-1-i+j。 /计算每个像素点在原图象中地坐标 i0 = (LONG (-(float j * fSin + (f

13、loat i * fCos + f2 + 0.5。 j0 = (LONG ( (float j * fCos + (float i * fSin + f1 + 0.5。 / 判断是否在源图象范围之内 if( (j0 = 0 & (j0 & (i0 = 0 & (i0 / 指向源DIB图象第i0行,第j0个象素地指针 lpSrc = (LPBYTElpDIBBits + lLineBytes * (lHeight - 1 - i0 + j0。 / 复制象素 *lpDst = *lpSrc。 else / 对于源图中没有地象素,直接赋值为255 * (LPBYTElpDst = 255。 /如果是

14、24位真彩色位图 else if(wNumColors=0 /旋转后图像每行 for(i = 0。 i /旋转后图象每列 for(j=0。j /指向图象第i行第j个像素地指针 lpDst =(LPBYTElpNewDIBBits + lNewLineBytes * (lNewHeight-1-i+3*j。 /计算每个像素点在原图象中地坐标 i0 = (LONG (-(float j * fSin + (float i * fCos + f2 + 0.5。 j0 = (LONG ( (float j * fCos + (float i * fSin + f1 + 0.5。 / 判断是否在源图象范

15、围之内 if( (j0 = 0 & (j0 & (i0 = 0 & (i0 / 指向源DIB图象第i0行,第j0个象素地指针 lpSrc = (LPBYTElpDIBBits + lLineBytes * (lHeight - 1 - i0 + 3*j0。 / 复制象素 memcpy(lpDst,lpSrc,3。 else / 对于源图中没有地象素,直接赋值为255 memset(lpDst,255,3。 else AfxMessageBox(只支持256色和真彩色位图。 / 释放内存 GlobalUnlock(hDIB。 GlobalFree(hDIB。 return NULL。 / 返回

16、return hDIB。/* * * 函数名称: * ZoomDIB( * * 参数: * LPSTR lpDIB - 指向源DIB地指针 * float fXZoomRatio - X轴方向缩放比率 * float fYZoomRatio - Y轴方向缩放比率 * * 返回值: * HGLOBAL - 缩放成功返回新DIB句柄,否则返回NULL. * * 说明: * 该函数用来缩放DIB图像,返回新生成DIB地句柄. * */HGLOBAL WINAPI ZoomDIB(LPSTR lpDIB, float fXZoomRatio, float fYZoomRatio / 源图像地宽度和高度

17、 LONG lWidth。 LONG lHeight。 / 缩放后图像地宽度和高度 LONG lNewWidth。 LONG lNewHeight。 WORD wNumColors。 / 缩放后图像地宽度lNewWidth,必须是4地倍数) LONG lNewLineBytes。 / 指向源图像地指针 LPBYTE lpDIBBits。 / 指向源象素地指针 LPBYTE lpSrc。 / 缩放后新DIB句柄 HDIB hDIB。 / 指向缩放图像对应象素地指针 LPBYTE lpDst。 / 指向缩放图像地指针 LPSTR lpNewDIB。 LPBYTE lpNewDIBBits。 / 指

18、向BITMAPINFO结构地指针Win3.0) LPBITMAPINFOHEADER lpbmi,lpbmi0。 / 指向BITMAPCOREINFO结构地指针 LPBITMAPCOREHEADER lpbmc。 / 循环变量:FindDIBBits(lpDIB。 / 获取图像地宽度 lWidth = :DIBWidth(lpDIB。 / 获取图像地高度 lHeight = :DIBHeight(lpDIB。 wNumColors= :DIBNumColors(lpDIB。 lpbmi0=(LPBITMAPINFOHEADERlpDIB。 / 计算图像每行地字节数 lLineBytes = W

19、IDTHBYTES(lWidth * (lpbmi0-biBitCount。 / 计算缩放后地图像实际宽度 / 此处直接加0.5是因为强制类型转换时不四舍五入,而是直接截去小数部分 lNewWidth = (LONG (lWidth* fXZoomRatio + 0.5。 / 计算新图像每行地字节数 lNewLineBytes = WIDTHBYTES(lNewWidth * (lpbmi0-biBitCount。 / 计算缩放后地图像高度 lNewHeight = (LONG (lHeight * fYZoomRatio + 0.5。 / 分配内存,以保存新DIB hDIB = (HDIB

20、:GlobalAlloc(GHND, lNewLineBytes * lNewHeight + *(LPDWORDlpDIB + :PaletteSize(lpDIB。 / 判断是否内存分配失败 if (hDIB = NULL / 分配内存失败 return NULL。 / 锁定内存 lpNewDIB = (LPSTR:GlobalLock(HGLOBAL hDIB。 / 复制DIB信息头和调色板 memcpy(lpNewDIB, lpDIB, *(LPDWORDlpDIB + :PaletteSize(lpDIB。 / 找到新DIB象素起始位置 lpNewDIBBits = (LPBYTE:

21、FindDIBBits(lpNewDIB。 / 获取指针 lpbmi = (LPBITMAPINFOHEADERlpNewDIB。 lpbmc = (LPBITMAPCOREHEADERlpNewDIB。 / 更新DIB中图像地高度和宽度 if (IS_WIN30_DIB(lpNewDIB / 对于Windows 3.0 DIB lpbmi-biWidth = lNewWidth。 lpbmi-biHeight = lNewHeight。 else / 对于其它格式地DIB lpbmc-bcWidth = (unsigned short lNewWidth。 lpbmc-bcHeight =

22、(unsigned short lNewHeight。 if(wNumColors=256 / 针对图像每行进行操作 for(i = 0。 i / 针对图像每列进行操作 for(j = 0。 j / 指向新DIB第i行,第j个象素地指针 / 注意此处宽度和高度是新DIB地宽度和高度 lpDst = (LPBYTElpNewDIBBits + lNewLineBytes * (lNewHeight - 1 - i + j。 / 计算该象素在源DIB中地坐标 i0 = (LONG (i / fYZoomRatio + 0.5。 j0 = (LONG (j / fXZoomRatio + 0.5。

23、/ 判断是否在源图范围内 if( (j0 = 0 & (j0 & (i0 = 0 & (i0 / 指向源DIB第i0行,第j0个象素地指针 lpSrc = (LPBYTElpDIBBits + lLineBytes * (lHeight - 1 - i0 + j0。 / 复制象素 *lpDst = *lpSrc。 else / 对于源图中没有地象素,直接赋值为255 * (LPBYTElpDst = 255。 else if(wNumColors=0 for(i = 0。 i / 针对图像每列进行操作 for(j = 0。 j / 指向新DIB第i行,第j个象素地指针 / 注意此处宽度和高度是新DIB地宽

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1