⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch1_1view.cpp

📁 vc++数字图像处理 ,是一本很不错的介绍数字图像方面的书籍,这里有本书的全部源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		return;	}		// 获取用户设定的平移量	fXZoomRatio = dlgPara.m_XZoom;	fYZoomRatio = dlgPara.m_YZoom;		// 删除对话框	delete dlgPara;			// 创建新DIB	HDIB hNewDIB = NULL;		// 更改光标形状	BeginWaitCursor();		// 调用ZoomDIB()函数转置DIB	hNewDIB = (HDIB) ZoomDIB(lpDIB, fXZoomRatio, fYZoomRatio);		// 判断缩放是否成功	if (hNewDIB != NULL)	{				// 替换DIB,同时释放旧DIB对象		pDoc->ReplaceHDIB(hNewDIB);		// 更新DIB大小和调色板		pDoc->InitDIBData();				// 设置脏标记		pDoc->SetModifiedFlag(TRUE);				// 重新设置滚动视图大小		SetScrollSizes(MM_TEXT, pDoc->GetDocSize());		// 更新视图		pDoc->UpdateAllViews(NULL);	}	else	{		// 提示用户		MessageBox("分配内存失败!", "系统提示" , MB_ICONINFORMATION | MB_OK);	}		// 解除锁定	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());	// 恢复光标	EndWaitCursor();	}void CCh1_1View::OnGeomRota() {	// 图像旋转	// 获取文档	CCh1_1Doc* pDoc = GetDocument();		// 指向DIB的指针	LPSTR lpDIB;		// 锁定DIB	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());		// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的旋转,其它的可以类推)	if (::DIBNumColors(lpDIB) != 256)	{		// 提示用户		MessageBox("目前只支持256色位图的旋转!", "系统提示" , MB_ICONINFORMATION | MB_OK);		// 解除锁定		::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());				// 返回		return;	}		// 缩放比率	int iRotateAngle;		// 创建对话框	CDlgGeoRota dlgPara;		// 初始化变量值	dlgPara.m_iRotateAngle = 90;		// 显示对话框,提示用户设定旋转角度	if (dlgPara.DoModal() != IDOK)	{		// 返回		return;	}		// 获取用户设定的平移量	iRotateAngle = dlgPara.m_iRotateAngle;		// 删除对话框	delete dlgPara;				// 创建新DIB	HDIB hNewDIB = NULL;		// 更改光标形状	BeginWaitCursor();		// 调用RotateDIB()函数旋转DIB	hNewDIB = (HDIB) RotateDIB(lpDIB, iRotateAngle);		// 判断旋转是否成功	if (hNewDIB != NULL)	{				// 替换DIB,同时释放旧DIB对象		pDoc->ReplaceHDIB(hNewDIB);		// 更新DIB大小和调色板		pDoc->InitDIBData();				// 设置脏标记		pDoc->SetModifiedFlag(TRUE);				// 重新设置滚动视图大小		SetScrollSizes(MM_TEXT, pDoc->GetDocSize());				// 更新视图		pDoc->UpdateAllViews(NULL);	}	else	{		// 提示用户		MessageBox("分配内存失败!", "系统提示" , MB_ICONINFORMATION | MB_OK);	}		// 解除锁定	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());	// 恢复光标	EndWaitCursor();}////////////////////////////////////////////////////////////////////////////////////////  图像增强//void CCh1_1View::OnEnhaSmooth() {	// 图像平滑		// 获取文档	CCh1_1Doc* pDoc = GetDocument();		// 指向DIB的指针	LPSTR	lpDIB;		// 指向DIB象素指针	LPSTR   lpDIBBits;		// 模板高度	int		iTempH;		// 模板宽度	int		iTempW;		// 模板系数	FLOAT	fTempC;		// 模板中心元素X坐标	int		iTempMX;		// 模板中心元素Y坐标	int		iTempMY;		// 模板元素数组	FLOAT	aValue[25];		// 锁定DIB	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());	// 找到DIB图像象素起始位置	lpDIBBits = ::FindDIBBits(lpDIB);		// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的平滑,其它的可以类推)	if (::DIBNumColors(lpDIB) != 256)	{		// 提示用户		MessageBox("目前只支持256色位图的平滑!", "系统提示" , 			MB_ICONINFORMATION | MB_OK);				// 解除锁定		::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());				// 返回		return;	}		// 创建对话框	CDlgSmooth dlgPara;		// 给模板数组赋初值(为平均模板)	aValue[0] = 1.0;	aValue[1] = 1.0;	aValue[2] = 1.0;	aValue[3] = 0.0;	aValue[4] = 0.0;	aValue[5] = 1.0;	aValue[6] = 1.0;	aValue[7] = 1.0;	aValue[8] = 0.0;	aValue[9] = 0.0;	aValue[10] = 1.0;	aValue[11] = 1.0;	aValue[12] = 1.0;	aValue[13] = 0.0;	aValue[14] = 0.0;	aValue[15] = 0.0;	aValue[16] = 0.0;	aValue[17] = 0.0;	aValue[18] = 0.0;	aValue[19] = 0.0;	aValue[20] = 0.0;	aValue[21] = 0.0;	aValue[22] = 0.0;	aValue[23] = 0.0;	aValue[24] = 0.0;		// 初始化对话框变量值	dlgPara.m_intType = 0;	dlgPara.m_iTempH  = 3;	dlgPara.m_iTempW  = 3;	dlgPara.m_iTempMX = 1;	dlgPara.m_iTempMY = 1;	dlgPara.m_fTempC  = (FLOAT) (1.0 / 9.0);	dlgPara.m_fpArray = aValue;		// 显示对话框,提示用户设定平移量	if (dlgPara.DoModal() != IDOK)	{		// 返回		return;	}		// 获取用户设定的平移量	iTempH  = dlgPara.m_iTempH;	iTempW  = dlgPara.m_iTempW;	iTempMX = dlgPara.m_iTempMX;	iTempMY = dlgPara.m_iTempMY;	fTempC  = dlgPara.m_fTempC;		// 删除对话框	delete dlgPara;			// 更改光标形状	BeginWaitCursor();		// 调用Template()函数平滑DIB	if (::Template(lpDIBBits, ::DIBWidth(lpDIB), ::DIBHeight(lpDIB), 		  iTempH, iTempW, iTempMX, iTempMY, aValue, fTempC))	{				// 设置脏标记		pDoc->SetModifiedFlag(TRUE);		// 更新视图		pDoc->UpdateAllViews(NULL);	}	else	{		// 提示用户		MessageBox("分配内存失败!", "系统提示" , MB_ICONINFORMATION | MB_OK);	}		// 解除锁定	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());	// 恢复光标	EndWaitCursor();	}void CCh1_1View::OnENHAMidianF() {	// 中值滤波		// 获取文档	CCh1_1Doc* pDoc = GetDocument();		// 指向DIB的指针	LPSTR	lpDIB;		// 指向DIB象素指针	LPSTR   lpDIBBits;		// 滤波器的高度	int iFilterH;		// 滤波器的宽度	int iFilterW;		// 中心元素的X坐标	int iFilterMX;		// 中心元素的Y坐标	int iFilterMY;		// 锁定DIB	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());	// 找到DIB图像象素起始位置	lpDIBBits = ::FindDIBBits(lpDIB);		// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的中值滤波,其它的可以类推)	if (::DIBNumColors(lpDIB) != 256)	{		// 提示用户		MessageBox("目前只支持256色位图的中值滤波!", "系统提示" ,			MB_ICONINFORMATION | MB_OK);				// 解除锁定		::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());				// 返回		return;	}		// 创建对话框	CDlgMidFilter dlgPara;		// 初始化变量值	dlgPara.m_iFilterType = 0;	dlgPara.m_iFilterH = 3;	dlgPara.m_iFilterW = 1;	dlgPara.m_iFilterMX = 0;	dlgPara.m_iFilterMY = 1;		// 显示对话框,提示用户设定平移量	if (dlgPara.DoModal() != IDOK)	{		// 返回		return;	}		// 获取用户的设定	iFilterH = dlgPara.m_iFilterH;	iFilterW = dlgPara.m_iFilterW;	iFilterMX = dlgPara.m_iFilterMX;	iFilterMY = dlgPara.m_iFilterMY;		// 删除对话框	delete dlgPara;			// 更改光标形状	BeginWaitCursor();		// 调用MedianFilter()函数中值滤波	if (::MedianFilter(lpDIBBits, ::DIBWidth(lpDIB), ::DIBHeight(lpDIB), 		  iFilterH, iFilterW, iFilterMX, iFilterMY))	{				// 设置脏标记		pDoc->SetModifiedFlag(TRUE);		// 更新视图		pDoc->UpdateAllViews(NULL);	}	else	{		// 提示用户		MessageBox("分配内存失败!", "系统提示" , MB_ICONINFORMATION | MB_OK);	}		// 解除锁定	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());	// 恢复光标	EndWaitCursor();	}void CCh1_1View::OnEnhaGradsharp() {	// 梯度锐化		// 获取文档	CCh1_1Doc* pDoc = GetDocument();		// 指向DIB的指针	LPSTR lpDIB;		// 指向DIB象素指针	LPSTR    lpDIBBits;		// 锁定DIB	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());	// 找到DIB图像象素起始位置	lpDIBBits = ::FindDIBBits(lpDIB);			// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的梯度锐化,其它的可以类推)	if (::DIBNumColors(lpDIB) != 256)	{		// 提示用户		MessageBox("目前只支持256色位图的梯度锐化!", "系统提示" , 			MB_ICONINFORMATION | MB_OK);				// 解除锁定		::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());				// 返回		return;	}		// 阈值	BYTE	bThre;		// 创建对话框	CDlgSharpThre dlgPara;		// 初始化变量值	dlgPara.m_bThre = 10;		// 提示用户输入阈值	if (dlgPara.DoModal() != IDOK)	{		// 返回		return;	}		// 获取用户的设定	bThre = dlgPara.m_bThre;		// 删除对话框	delete dlgPara;			// 更改光标形状	BeginWaitCursor();		// 调用GradSharp()函数进行梯度板锐化	if (::GradSharp(lpDIBBits, ::DIBWidth(lpDIB), ::DIBHeight(lpDIB), bThre))	{				// 设置脏标记		pDoc->SetModifiedFlag(TRUE);		// 更新视图		pDoc->UpdateAllViews(NULL);	}	else	{		// 提示用户		MessageBox("分配内存失败!", "系统提示" , MB_ICONINFORMATION | MB_OK);	}		// 解除锁定	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());	// 恢复光标	EndWaitCursor();	}void CCh1_1View::OnEnhaSharp() {	// 图像锐化		// 获取文档	CCh1_1Doc* pDoc = GetDocument();		// 指向DIB的指针	LPSTR lpDIB;		// 指向DIB象素指针	LPSTR    lpDIBBits;		// 模板高度	int		iTempH;		// 模板宽度	int		iTempW;		// 模板系数	FLOAT	fTempC;		// 模板中心元素X坐标	int		iTempMX;		// 模板中心元素Y坐标	int		iTempMY;		// 模板元素数组	FLOAT	aValue[9];		// 锁定DIB	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());	// 找到DIB图像象素起始位置	lpDIBBits = ::FindDIBBits(lpDIB);			// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的锐化,其它的可以类推)	if (::DIBNumColors(lpDIB) != 256)	{		// 提示用户		MessageBox("目前只支持256色位图的锐化!", "系统提示" , 			MB_ICONINFORMATION | MB_OK);				// 解除锁定		::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());				// 返回		return;	}		// 更改光标形状	BeginWaitCursor();		// 设置拉普拉斯模板参数	iTempW = 3;	iTempH = 3;	fTempC = 1.0;	iTempMX = 1;	iTempMY = 1;	aValue[0] = -1.0;	aValue[1] = -1.0;	aValue[2] = -1.0;	aValue[3] = -1.0;	aValue[4] =  9.0;	aValue[5] = -1.0;	aValue[6] = -1.0;	aValue[7] = -1.0;	aValue[8] = -1.0;		// 调用Template()函数用拉普拉斯模板锐化DIB	if (::Template(lpDIBBits, ::DIBWidth(lpDIB), ::DIBHeight(lpDIB), 		  iTempH, iTempW, iTempMX, iTempMY, aValue, fTempC))	{				// 设置脏标记		pDoc->SetModifiedFlag(TRUE);		// 更新视图		pDoc->UpdateAllViews(NULL);	}	else	{		// 提示用户		MessageBox("分配内存失败!", "系统提示" , MB_ICONINFORMATION | MB_OK);	}		// 解除锁定	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());	// 恢复光标	EndWaitCursor();}void CCh1_1View::OnEnhaColor() {	// 伪彩色编码		// 获取文档	CCh1_1Doc* pDoc = GetDocument();		// 保存用户选择的伪彩色编码表索引	int		nColor;		// 指向DIB的指针	LPSTR	lpDIB;		// 锁定DIB	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());		// 判断是否是8-bpp位图(只处理256色位图的伪彩色变换,其它的可以类推)	if (::DIBNumColors(lpDIB) != 256)	{		// 提示用户		MessageBox("目前只支持256色位图的伪彩色变换!", "系统提示" , 			MB_ICONINFORMATION | MB_OK);				// 解除锁定		::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());				// 返回		return;	}		// 参数对话框	CDlgColor dlgPara;		// 初始化变量值	if (pDoc->m_nColorIndex >= 0)	{		// 初始选中当前的伪彩色		dlgPara.m_nColor = pDoc->m_nColorIndex;	}	else	{		// 初始选中灰度伪彩色编码表		dlgPara.m_nColor = 0;	}		// 指向名称数组的指针	dlgPara.m_lpColorName = (LPSTR) ColorScaleName;		// 伪彩色编码数目	dlgPara.m_nColorCount = COLOR_SCALE_COUNT;		// 名称字符串长度	dlgPara.m_nNameLen = sizeof(ColorScaleName) / COLOR_SCALE_COUNT;		// 显示对话框,提示用户设定平移量	if (dlgPara.DoModal() != IDOK)	{		// 返回		return;	}		// 获取用户的设定	nColor = dlgPara.m_nColor;		// 删除对话框	delete dlgPara;			// 更改光标形状	BeginWaitCursor();	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -