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

时间:2025-04-03

这是本人学习《Visual C++实践与提高—数字图像处理与工程应用篇》这本书时做的笔记。该书由高守传 姚领田等编著。中国铁道出版社出版

第五章 图像的几何变换

数字图像平移 图像平移函数

/************************************************************************* * 函数名称:Translation(LPSTR lpSrcStartBits, long lWidth, long lHeight, long lXOffset, long lYOffset,long lLineBytes,long lDstLineBytes) * 函数参数:

* LPSTR lpSrcStartBits,指向源DIB起始像素的指针 * long lWidth,DIB图象的宽度 * long lHeight,DIB图象的高度 * long lXOffset,X方向偏移量 * long lYOffset,Y方向偏移量 * long lLineBytes,DIB图象的行字节数,为4的倍数 * long lDstLineBytes,临时DIB图象的行字节数,为4的倍数 * 函数类型:BOOL

* 函数功能:该函数用来平移DIB图象

************************************************************************/ BOOL Translation(LPSTR lpSrcStartBits, long lWidth, long lHeight, long lXOffset, long lYOffset,long lLineBytes,long lDstLineBytes) {

long i; //行循环变量 long j; //列循环变量

LPSTR lpSrcDIBBits; //指向源像素的指针

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++)// 行 { for(j = 0; j < lWidth; j++) // 列 { lpDstDIBBits=(char*)lpDstStartBits+lLineBytes*(lHeight-1-i) +j;// 指向新DIB第i行,第j个像素的指针 if( (j-lYOffset>= 0) && (j-lYOffset< lWidth) && // 像素在源DIB中的坐标j-lXOffset (i-lXOffset>= 0) && (i-lXOffset < lHeight))// 判断是否在源图范围内

这是本人学习《Visual C++实践与提高—数字图像处理与工程应用篇》这本书时做的笔记。该书由高守传 姚领田等编著。中国铁道出版社出版

}

}

}

{

lpSrcDIBBits=(char *)lpSrcStartBits+lLineBytes*(lHeight-1- (i-lXOffset))+(j-lYOffset);// 指向源DIB第i0行,第j0个像素的指针

*lpDstDIBBits= *lpSrcDIBBits;// 复制像素 } else { }

* ((unsigned char*)lpDstDIBBits) = 255;// 源图中没有的像素,赋为255

memcpy(lpSrcStartBits, lpDstStartBits, lLineBytes * lHeight);// 复制图象

LocalUnlock(hDstDIBBits);// 释放内存 LocalFree(hDstDIBBits); return TRUE;

该函数调用函数CDImagePorcess View视图类的 //图像平移

void CDImageProcessView::OnTranslation() { // TODO: Add your command handler code here CDImageProcessDoc* pDoc = GetDocument(); //////////////////////////////////////////////////////////////////////////////////////////////// 回

long lSrcLineBytes; //图象每行的字节数 long lSrcWidth; //图象的宽度和高度 long lSrcHeight; LPSTR lpSrcDib; //指向源图象的指针 LPSTR lpSrcStartBits; //指向源像素的指针 long lDstLineBytes; //新图象每行的字节数

lpSrcDib= (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHObject());// 锁定DIB if (pDoc->m_dib.GetColorNum(lpSrcDib) != 256)// 判断是否是8-bpp位图 { AfxMessageBox("对不起,不是256色位图!");// 警告 ::GlobalUnlock((HGLOBAL) pDoc->GetHObject());// 解除锁定 return; //返回 } //判断是否是8-bpp位图,不是则返

lpSrcStartBits=pDoc->m_dib.GetBits(lpSrcDib); // 找到DIB图象像素起始位置

lSrcWidth= pDoc->m_dib.GetWidth(lpSrcDib); // 获取图象的宽度

lSrcHeight= pDoc->m_dib.GetHeight(lpSrcDib); // 获取图象的高度

这是本人学习《Visual C++实践与提高—数字图像处理与工程应用篇》这本书时做的笔记。该书由高守传 姚领田等编著。中国铁道出版社出版

lSrcLineBytes=pDoc->m_dib.GetReqByteWidth(lSrcWidth * 8); // 计算图象每行的字节数

///////////////////////////////////////////////////////////////////////////////////////////////// 数 }

lDstLineBytes=pDoc->m_dib.GetReqByteWidth(lSrcHeight * 8); // 计算新图象每行的字节

CDlgTran TranPara;// 创建对话框

if (TranPara.DoModal() != IDOK)// 显示对话框,提示用户设定量 return;

int temver=TranPara.m_verOff; int temhor=TranPara.m_horOff;

if (Translation(lpSrcStartBits, lSrcWidth,lSrcHeight,// 调用Translation()函数平移DIB temver,temhor,lSrcLineBytes,lDstLineBytes)) {

pDoc->SetModifiedFlag(TRUE); pDoc->UpdateAllViews(NULL); ::GlobalUnlock((HGLOBAL) pDoc->GetHObject()); } else {

AfxMessageBox(_T("分配内存失败!")); }//警告

// 设置脏标记

// 更新视图

// 解除锁定

数字图像旋转 图像旋转函数

/************************************************************************* * 函数名称: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图象高度

* long lLineBytes,源DIB图象字节宽度(4的倍数) * WORD palSize,源DIB图象调色板大小 * long lDstWidth,目标图象宽度

这是本人学习《 …… 此处隐藏:19054字,全部文档内容请下载后查看。喜欢就下载吧 ……

《Visual C++实践与提高—数字图像处理与工程应用篇》第五章学习笔记.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    Copyright © 2023-2025 学科文库 版权所有
    本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
    客服QQ:370150219 邮箱:370150219@qq.com
    苏ICP备16052595号-5

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219