欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    《Visual C++实践与提高数字图像处理与工程应用篇》第五章学习笔记Word下载.docx

    • 资源ID:7394316       资源大小:24.77KB        全文页数:29页
    • 资源格式: DOCX        下载积分:1金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要1金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《Visual C++实践与提高数字图像处理与工程应用篇》第五章学习笔记Word下载.docx

    1、 LPSTR lpDstDIBBits; /指向临时图象对应像素的指针 LPSTR lpDstStartBits; /指向临时图象对应像素的指针 HLOCAL hDstDIBBits; /临时图象句柄 hDstDIBBits= LocalAlloc(LHND, lWidth * lDstLineBytes);/ 分配临时内存 lpDstStartBits= (char * )LocalLock(hDstDIBBits);/ 锁定内存 if (hDstDIBBits= NULL)/ 判断是否内存分配 return FALSE;/ 分配内存失败 for(i = 0; i lHeight; i+)/

    2、 行 for(j = 0; j = 0) & (j-lYOffset (i-lXOffset GetHObject();/ 锁定DIB if (pDoc-m_dib.GetColorNum(lpSrcDib) != 256)/ 判断是否是8-bpp位图 AfxMessageBox(对不起,不是256色位图!);/ 警告 :GlobalUnlock(HGLOBAL) pDoc-/ 解除锁定 return; /返回 /判断是否是8-bpp位图,不是则返回 lpSrcStartBits=pDoc-m_dib.GetBits(lpSrcDib); / 找到DIB图象像素起始位置 lSrcWidth=

    3、pDoc-m_dib.GetWidth(lpSrcDib); / 获取图象的宽度 lSrcHeight= pDoc-m_dib.GetHeight(lpSrcDib); / 获取图象的高度 lSrcLineBytes=pDoc-m_dib.GetReqByteWidth(lSrcWidth * 8); / 计算图象每行的字节数/ lDstLineBytes=pDoc-m_dib.GetReqByteWidth(lSrcHeight * 8); / 计算新图象每行的字节数 CDlgTran TranPara;/ 创建对话框 if (TranPara.DoModal() != IDOK)/ 显示对

    4、话框,提示用户设定量 int temver=TranPara.m_verOff; int temhor=TranPara.m_horOff; if (Translation(lpSrcStartBits, lSrcWidth,lSrcHeight,/ 调用Translation()函数平移DIB temver,temhor,lSrcLineBytes,lDstLineBytes) pDoc-SetModifiedFlag(TRUE); / 设置脏标记 UpdateAllViews(NULL); / 更新视图 / 解除锁定 else AfxMessageBox(_T(分配内存失败!); /警告

    5、数字图像旋转图像旋转函数Rotate(LPSTR lpSrcDib, LPSTR lpSrcStartBits,long lWidth, long lHeight, long lLineBytes, WORD palSize, long lDstWidth, long lDstHeight,long lDstLineBytes,float fSina, float fCosa) * LPSTR lpSrcDib,指向源DIB的指针 * LPSTR lpSrcStartBits,指向源DIB的起始像素的指针 * long lWidth,源DIB图象宽度 * long lHeight,源DIB图象

    6、高度 * long lLineBytes,源DIB图象字节宽度(4的倍数) * WORD palSize,源DIB图象调色板大小 * long lDstWidth,目标图象宽度 * long lDstHeight,目标DIB图象高度 * long lDstLineBytes,目标DIB图象行字节数(4的倍数) * float fSina,旋转角的余弦,说明:为了避免两次求取正余弦,这里作为两个函数参数来用 * float fCosa,旋转角的正弦HGLOBAL用来旋转DIB图象HGLOBAL Rotate(LPSTR lpSrcDib, LPSTR lpSrcStartBits,long lW

    7、idth, long lHeight, float varFloat1; /浮点参数变量1 float varFloat2; /浮点参数变量2 LPSTR lpDstDib; /指向临时图象的指针 long i1; long j1; /指向临时图象对应像素的指针 LPBITMAPINFOHEADER lpbmi;/ 指向BITMAPINFOHEADER结构的指针 varFloat1= (float) (-0.5 * (lDstWidth - 1) * fCosa - 0.5 * (lDstHeight - 1) * fSina/ 将经常用到的两个常数事先求出,以便作为常数使用 + 0.5 *

    8、(lDstWidth - 1); varFloat2= (float) ( 0.5 * (lDstWidth - 1) * fSina - 0.5 * (lDstHeight - 1) * fCosa + 0.5 * (lDstHeight - 1); HGLOBAL hDIB = (HGLOBAL) :GlobalAlloc(GHND, lDstLineBytes * lDstHeight + *(LPDWORD)lpSrcDib +palSize);/ 分配内存,以保存新DIB if (hDIB = NULL)/ 判断是否是有效的DIB对象/ 不是,则返回 lpDstDib= (char

    9、* ):GlobalLock(HGLOBAL) hDIB);/ 锁定内存 memcpy(lpDstDib,lpSrcDib, *(LPDWORD)lpSrcDib +palSize);/ 复制DIB信息头和调色板 lpbmi = (LPBITMAPINFOHEADER)lpDstDib;/ 获取指针 lpbmi-biHeight=lDstHeight;/ 更新DIB中图象的高度和宽度biWidth =lDstWidth; lpDstStartBits=lpDstDib+ *(LPDWORD)lpDstDib +palSize;/ 求像素起始位置,作用如同:FindDIBBits(gCo.lpS

    10、rcDib),这里尝试使用了这种方法,以避免对全局函数的调用 lDstHeight; i+)/ 行操作 for(j = 0; lDstWidth; j+)/ 列操作 lpDstDIBBits= (char *)lpDstStartBits+ lDstLineBytes * (lDstHeight - 1 - i) + j;/ 指向新DIB第i行,第j个像素的指针 i1= (long) (-(float) j) * fSina + (float) i) * fCosa + varFloat2 + 0.5);/ 计算该像素在源DIB中的坐标 j1= (long) ( (float) j) * fC

    11、osa + (float) i) * fSina + varFloat1 + 0.5); if( (j1 (j1 (i1m_dib.GetPalSize(lpSrcDib); float fRotateAngle = (float) AngleToRadian(RotPara.m_rotAngle);/ 将旋转角度从度转换到弧度 float fSina = (float) sin(double)fRotateAngle);/ 计算旋转角度的正余弦 float fCosa = (float) cos(double)fRotateAngle); float fSrcX1,fSrcY1,fSrcX2

    12、,fSrcY2,fSrcX3,fSrcY3,fSrcX4,fSrcY4;/ 旋转前四个角的坐标(以图象中心为坐标系原点) float fDstX1,fDstY1,fDstX2,fDstY2,fDstX3,fDstY3,fDstX4,fDstY4;/ 旋转后四个角的坐标(以图象中心为坐标系原点) fSrcX1 = (float) (- (lSrcWidth - 1) / 2);/ 计算原图的四个角的坐标 fSrcY1 = (float) ( (lSrcHeight - 1) / 2); fSrcX2 = (float) ( (lSrcWidth - 1) / 2); fSrcY2 = (floa

    13、t) ( (lSrcHeight - 1) / 2); fSrcX3 = (float) (- (lSrcWidth - 1) / 2); fSrcY3 = (float) (- (lSrcHeight - 1) / 2); fSrcX4 = (float) ( (lSrcWidth - 1) / 2); fSrcY4 = (float) (- (lSrcHeight - 1) / 2); fDstX1 = fCosa * fSrcX1 + fSina * fSrcY1;/ 计算新图四个角的坐标 fDstY1 = -fSina * fSrcX1 + fCosa * fSrcY1; fDstX2

    14、 = fCosa * fSrcX2 + fSina * fSrcY2; fDstY2 = -fSina * fSrcX2 + fCosa * fSrcY2; fDstX3 = fCosa * fSrcX3 + fSina * fSrcY3; fDstY3 = -fSina * fSrcX3 + fCosa * fSrcY3; fDstX4 = fCosa * fSrcX4 + fSina * fSrcY4; fDstY4 = -fSina * fSrcX4 + fCosa * fSrcY4; lDstWidth= (long) ( max( fabs(fDstX4 - fDstX1), fab

    15、s(fDstX3 - fDstX2) ) + 0.5);/ 计算旋转后的图象实际宽度m_dib.GetReqByteWidth(lDstWidth * 8);/ 计算新图象每行的字节数 lDstHeight= (long) ( max( fabs(fDstY4 - fDstY1), fabs(fDstY3 - fDstY2) ) + 0.5);/ 计算旋转后的图象高度 HGLOBAL hDstDIB = NULL;/ 创建新DIB hDstDIB = (HGLOBAL) Rotate(lpSrcDib,lpSrcStartBits,lSrcWidth,lSrcHeight,lSrcLineBytes, palSize,lDstWidth,lDstHeight,lDstLineBytes,fSina,fCosa);/ 调用Rotate()函数旋转DIB if(hDstDIB != NULL)/ 判断旋转是否成功 UpdateObject(hDstDIB);/ 替换DIB,同时释放旧DIB对象 SetDib();/ 更新DIB大小和调色板 / 警告 数字图像缩放图像缩放函数Zoom(LPSTR lpSrcDib, LPSTR lpSrcStartBits,long lWidth, long lHeight, long lLin


    注意事项

    本文(《Visual C++实践与提高数字图像处理与工程应用篇》第五章学习笔记Word下载.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开