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

📄 ch1_1view.cpp

📁 vc++数字图像处理 ,是一本很不错的介绍数字图像方面的书籍,这里有本书的全部源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		// 获取用户设定的平移量	fA = dlgPara.m_fA;	fB = dlgPara.m_fB;		// 删除对话框	delete dlgPara;			// 更改光标形状	BeginWaitCursor();		// 调用LinerTrans()函数进行线性变换	LinerTrans(lpDIBBits, ::DIBWidth(lpDIB), ::DIBHeight(lpDIB), fA, fB);		// 设置脏标记	pDoc->SetModifiedFlag(TRUE);		// 更新视图	pDoc->UpdateAllViews(NULL);		// 解除锁定	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());	// 恢复光标	EndWaitCursor();	}void CCh1_1View::OnPointThre() {	// 阈值变换		// 获取文档	CCh1_1Doc* pDoc = GetDocument();		// 指向DIB的指针	LPSTR	lpDIB;		// 指向DIB象素指针	LPSTR   lpDIBBits;		// 参数对话框	CDlgPointThre  dlgPara;		// 阈值	BYTE	bThre;		// 锁定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;	}		// 初始化变量值	dlgPara.m_bThre = 128;		// 显示对话框,提示用户设定阈值	if (dlgPara.DoModal() != IDOK)	{		// 返回		return;	}		// 获取用户设定的阈值	bThre = dlgPara.m_bThre;		// 删除对话框	delete dlgPara;			// 更改光标形状	BeginWaitCursor();		// 调用ThresholdTrans()函数进行阈值变换	ThresholdTrans(lpDIBBits, ::DIBWidth(lpDIB), ::DIBHeight(lpDIB), bThre);		// 设置脏标记	pDoc->SetModifiedFlag(TRUE);		// 更新视图	pDoc->UpdateAllViews(NULL);		// 解除锁定	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());		// 恢复光标	EndWaitCursor();}void CCh1_1View::OnPointWind() {	// 窗口变换		// 获取文档	CCh1_1Doc* pDoc = GetDocument();		// 指向DIB的指针	LPSTR lpDIB;		// 指向DIB象素指针	LPSTR    lpDIBBits;		// 创建对话框	CDlgPointWin  dlgPara;		// 窗口下限	BYTE	bLow;		// 窗口上限	BYTE	bUp;		// 锁定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;	}		// 初始化变量值	dlgPara.m_bLow = 0;	dlgPara.m_bUp = 255;		// 显示对话框,提示用户设定窗口上下限	if (dlgPara.DoModal() != IDOK)	{		// 返回		return;	}		// 获取用户设定的窗口上下限	bLow = dlgPara.m_bLow;	bUp = dlgPara.m_bUp;		// 删除对话框	delete dlgPara;			// 更改光标形状	BeginWaitCursor();		// 调用WindowTrans()函数进行窗口变换	WindowTrans(lpDIBBits, ::DIBWidth(lpDIB), ::DIBHeight(lpDIB), bLow, bUp);		// 设置脏标记	pDoc->SetModifiedFlag(TRUE);		// 更新视图	pDoc->UpdateAllViews(NULL);		// 解除锁定	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());		// 恢复光标	EndWaitCursor();}void CCh1_1View::OnPointStre() {	// 灰度拉伸		// 获取文档	CCh1_1Doc* pDoc = GetDocument();		// 指向DIB的指针	LPSTR	lpDIB;		// 指向DIB象素指针	LPSTR   lpDIBBits;		// 创建对话框	CDlgPointStre dlgPara;		// 点1坐标	BYTE	bX1;	BYTE	bY1;		// 点2坐标	BYTE	bX2;	BYTE	bY2;		// 锁定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;	}		// 初始化变量值	dlgPara.m_bX1 = 50;	dlgPara.m_bY1 = 30;	dlgPara.m_bX2 = 200;	dlgPara.m_bY2 = 220;		// 显示对话框,提示用户设定拉伸位置	if (dlgPara.DoModal() != IDOK)	{		// 返回		return;	}		// 获取用户的设定	bX1 = dlgPara.m_bX1;	bY1 = dlgPara.m_bY1;	bX2 = dlgPara.m_bX2;	bY2 = dlgPara.m_bY2;		// 删除对话框	delete dlgPara;			// 更改光标形状	BeginWaitCursor();		// 调用GrayStretch()函数进行灰度拉伸	GrayStretch(lpDIBBits, ::DIBWidth(lpDIB), ::DIBHeight(lpDIB), bX1, bY1, bX2, bY2);		// 设置脏标记	pDoc->SetModifiedFlag(TRUE);		// 更新视图	pDoc->UpdateAllViews(NULL);		// 解除锁定	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());	// 恢复光标	EndWaitCursor();}void CCh1_1View::OnPointEqua() {	// 灰度均衡		// 获取文档	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;	}		// 更改光标形状	BeginWaitCursor();		// 调用InteEqualize()函数进行直方图均衡	InteEqualize(lpDIBBits, ::DIBWidth(lpDIB), ::DIBHeight(lpDIB));		// 设置脏标记	pDoc->SetModifiedFlag(TRUE);		// 更新视图	pDoc->UpdateAllViews(NULL);		// 解除锁定	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());	// 恢复光标	EndWaitCursor();	}////////////////////////////////////////////////////////////////////////////////////////  图像几何变换//void CCh1_1View::OnGeomTran() {	// 平移位图	// 获取文档	CCh1_1Doc* pDoc = GetDocument();		// 指向DIB的指针	LPSTR	lpDIB;	// 指向DIB象素指针	LPSTR   lpDIBBits;		// 锁定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;	}		LONG lXOffset;	LONG lYOffset;		// 创建对话框	CDlgGeoTran dlgPara;		// 初始化变量值	dlgPara.m_XOffset = 100;	dlgPara.m_YOffset = 100;		// 显示对话框,提示用户设定平移量	if (dlgPara.DoModal() != IDOK)	{		// 返回		return;	}		// 获取用户设定的平移量	lXOffset = dlgPara.m_XOffset;	lYOffset = dlgPara.m_YOffset;		// 删除对话框	delete dlgPara;			// 更改光标形状	BeginWaitCursor();	// 找到DIB图像象素起始位置	lpDIBBits = ::FindDIBBits(lpDIB);		// 调用TranslationDIB()函数平移DIB	if (TranslationDIB1(lpDIBBits, ::DIBWidth(lpDIB), ::DIBHeight(lpDIB), lXOffset, lYOffset))	{				// 设置脏标记		pDoc->SetModifiedFlag(TRUE);		// 更新视图		pDoc->UpdateAllViews(NULL);	}	else	{		// 提示用户		MessageBox("分配内存失败!", "系统提示" , MB_ICONINFORMATION | MB_OK);	}		// 解除锁定	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());	// 恢复光标	EndWaitCursor();}void CCh1_1View::OnGeomMirv() {	// 垂直镜像		// 获取文档	CCh1_1Doc* pDoc = GetDocument();		// 指向DIB的指针	LPSTR lpDIB;	// 指向DIB象素指针	LPSTR    lpDIBBits;		// 锁定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;	}			// 更改光标形状	BeginWaitCursor();	// 找到DIB图像象素起始位置	lpDIBBits = ::FindDIBBits(lpDIB);		// 调用MirrorDIB()函数垂直镜像DIB	if (MirrorDIB(lpDIBBits, ::DIBWidth(lpDIB), ::DIBHeight(lpDIB), FALSE))	{				// 设置脏标记		pDoc->SetModifiedFlag(TRUE);		// 更新视图		pDoc->UpdateAllViews(NULL);	}	else	{		// 提示用户		MessageBox("分配内存失败!", "系统提示" , MB_ICONINFORMATION | MB_OK);	}		// 解除锁定	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());	// 恢复光标	EndWaitCursor();}void CCh1_1View::OnGeomMirh() {	// 水平镜像	// 获取文档	CCh1_1Doc* pDoc = GetDocument();		// 指向DIB的指针	LPSTR lpDIB;	// 指向DIB象素指针	LPSTR    lpDIBBits;		// 锁定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;	}			// 更改光标形状	BeginWaitCursor();	// 找到DIB图像象素起始位置	lpDIBBits = ::FindDIBBits(lpDIB);		// 调用MirrorDIB()函数水平镜像DIB	if (MirrorDIB(lpDIBBits, ::DIBWidth(lpDIB), ::DIBHeight(lpDIB), TRUE))	{				// 设置脏标记		pDoc->SetModifiedFlag(TRUE);		// 更新视图		pDoc->UpdateAllViews(NULL);	}	else	{		// 提示用户		MessageBox("分配内存失败!", "系统提示" , MB_ICONINFORMATION | MB_OK);	}		// 解除锁定	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());	// 恢复光标	EndWaitCursor();	}void CCh1_1View::OnGeomTrpo() {	// 图像转置	// 获取文档	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;	}			// 更改光标形状	BeginWaitCursor();		// 调用TransposeDIB()函数转置DIB	if (TransposeDIB(lpDIB))	{				// 设置脏标记		pDoc->SetModifiedFlag(TRUE);				// 更新DIB大小和调色板		pDoc->InitDIBData();				// 重新设置滚动视图大小		SetScrollSizes(MM_TEXT, pDoc->GetDocSize());		// 更新视图		pDoc->UpdateAllViews(NULL);	}	else	{		// 提示用户		MessageBox("分配内存失败!", "系统提示" , MB_ICONINFORMATION | MB_OK);	}		// 解除锁定	::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());	// 恢复光标	EndWaitCursor();}void CCh1_1View::OnGeomZoom() {	// 图像缩放	// 获取文档	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;	}		// 缩放比率	float fXZoomRatio;	float fYZoomRatio;		// 创建对话框	CDlgGeoZoom dlgPara;		// 初始化变量值	dlgPara.m_XZoom = 0.5;	dlgPara.m_YZoom = 0.5;		// 显示对话框,提示用户设定平移量	if (dlgPara.DoModal() != IDOK)	{		// 返回

⌨️ 快捷键说明

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