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

📄 linjunjuandoc.cpp

📁 图像处理软件,功能比较基础
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	// 创建对话框
	cDlgMorphErosion dlgPara;
	
	// 初始化变量值
	dlgPara.m_nMode = 0;
	
	// 显示对话框,提示用户设定腐蚀方向
	if (dlgPara.DoModal() != IDOK)
	{
		// 返回
		return;
	}
	
	// 获取用户设定的腐蚀方向
	nMode = dlgPara.m_nMode;

	int structure[3][3];
	if (nMode == 2)
	{
		structure[0][0]=dlgPara.m_nStructure1;
		structure[0][1]=dlgPara.m_nStructure2;
		structure[0][2]=dlgPara.m_nStructure3;
		structure[1][0]=dlgPara.m_nStructure4;
		structure[1][1]=dlgPara.m_nStructure5;
		structure[1][2]=dlgPara.m_nStructure6;
		structure[2][0]=dlgPara.m_nStructure7;
		structure[2][1]=dlgPara.m_nStructure8;
		structure[2][2]=dlgPara.m_nStructure9;
	}
	
	// 删除对话框
	delete dlgPara;	
	
	// 更改光标形状
	BeginWaitCursor();

	// 找到DIB图像象素起始位置
	lpDIBBits = ::FindDIBBits(lpDIB);
	int bmpWidth=WIDTHBYTES(::DIBWidth(lpDIB) * 8);
	
	// 调用ErosionDIB()函数腐蚀DIB
	if (ErosionDIB(lpDIBBits, WIDTHBYTES(::DIBWidth(lpDIB) * 8), ::DIBHeight(lpDIB), nMode , structure))
	{
		
		// 设置脏标记
		for (int i=dealpic.row-1;i>=0;i--)
			for (int j=0;j<dealpic.col;j++)
			{
				dealpic.p[dealpic.row-i-1][j]=*(lpDIBBits+i*bmpWidth+j);
			}
		
		// 更新视图
			dspace_2d(orgpic.p,orgpic.row,orgpic.col);
			orgpic=dealpic;
			if ((m_hDIB=ChangeToHDIB(dealpic))==NULL)
			{
				AfxMessageBox("不能显示!");		
				return ;
			}
			SaveHistory();
			InitDIBData();
			UpdateAllViews(NULL);
		
	}
	else
	{
		// 提示用户
		AfxMessageBox("分配内存失败或者图像中含有0和255之外的像素值!",/* "系统提示" , */MB_ICONINFORMATION | MB_OK);
	}
	
	// 解除锁定
	::GlobalUnlock((HGLOBAL) ChangeToHDIB(orgpic));

	// 恢复光标
	EndWaitCursor();
	
		
}

void CLinjunjuanDoc::OnMorphDilation() 
{
	//腐蚀运算

	// 获取文档
	if (!flagpic)
	{
		AfxMessageBox("没有输入图象!");
		return;
	}
		dealpic.row=orgpic.row;
		dealpic.col=orgpic.col;
		if (!(dealpic.p=fspace_2d(dealpic.row,dealpic.col)))
		{
			AfxMessageBox("分配空间错误!");
			return;
		}

	
	// 指向DIB的指针
	LPSTR	lpDIB;

	// 指向DIB象素指针
	LPSTR   lpDIBBits;
	
	// 锁定DIB
	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) ChangeToHDIB(orgpic));
	
	// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的腐蚀,其它的可以类推)
	if (::DIBNumColors(lpDIB) != 256)
	{
		// 提示用户
		AfxMessageBox("目前只支持256色位图的腐蚀!", /*"系统提示" ,*/ MB_ICONINFORMATION | MB_OK);

		// 解除锁定
		::GlobalUnlock((HGLOBAL)ChangeToHDIB(orgpic));
		
		// 返回
		return;
	}
	
	int nMode;
	
	// 创建对话框
	cDlgMorphErosion dlgPara;
	
	// 初始化变量值
	dlgPara.m_nMode = 0;
	
	// 显示对话框,提示用户设定腐蚀方向
	if (dlgPara.DoModal() != IDOK)
	{
		// 返回
		return;
	}
	
	// 获取用户设定的腐蚀方向
	nMode = dlgPara.m_nMode;

	int structure[3][3];
	if (nMode == 2)
	{
		structure[0][0]=dlgPara.m_nStructure1;
		structure[0][1]=dlgPara.m_nStructure2;
		structure[0][2]=dlgPara.m_nStructure3;
		structure[1][0]=dlgPara.m_nStructure4;
		structure[1][1]=dlgPara.m_nStructure5;
		structure[1][2]=dlgPara.m_nStructure6;
		structure[2][0]=dlgPara.m_nStructure7;
		structure[2][1]=dlgPara.m_nStructure8;
		structure[2][2]=dlgPara.m_nStructure9;
	}
	
	// 删除对话框
	delete dlgPara;	
	
	// 更改光标形状
	BeginWaitCursor();

	// 找到DIB图像象素起始位置
	lpDIBBits = ::FindDIBBits(lpDIB);
	int bmpWidth=WIDTHBYTES(::DIBWidth(lpDIB) * 8);
	
	// 调用ErosionDIB()函数腐蚀DIB
	if (DilationDIB(lpDIBBits, WIDTHBYTES(::DIBWidth(lpDIB) * 8), ::DIBHeight(lpDIB), nMode , structure))
	{
		
		// 设置脏标记
		for (int i=dealpic.row-1;i>=0;i--)
			for (int j=0;j<dealpic.col;j++)
			{
				dealpic.p[dealpic.row-i-1][j]=*(lpDIBBits+i*bmpWidth+j);
			}
		
		// 更新视图
			dspace_2d(orgpic.p,orgpic.row,orgpic.col);
			orgpic=dealpic;
			if ((m_hDIB=ChangeToHDIB(dealpic))==NULL)
			{
				AfxMessageBox("不能显示!");		
				return ;
			}
			SaveHistory();
			InitDIBData();
			UpdateAllViews(NULL);
		
	}
	else
	{
		// 提示用户
		AfxMessageBox("分配内存失败或者图像中含有0和255之外的像素值!",/* "系统提示" , */MB_ICONINFORMATION | MB_OK);
	}
	
	// 解除锁定
	::GlobalUnlock((HGLOBAL) ChangeToHDIB(orgpic));

	// 恢复光标
	EndWaitCursor();
	
	
}

void CLinjunjuanDoc::OnMorphOpen() 
{
		//腐蚀运算

	// 获取文档
	if (!flagpic)
	{
		AfxMessageBox("没有输入图象!");
		return;
	}
		dealpic.row=orgpic.row;
		dealpic.col=orgpic.col;
		if (!(dealpic.p=fspace_2d(dealpic.row,dealpic.col)))
		{
			AfxMessageBox("分配空间错误!");
			return;
		}

	
	// 指向DIB的指针
	LPSTR	lpDIB;

	// 指向DIB象素指针
	LPSTR   lpDIBBits;
	
	// 锁定DIB
	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) ChangeToHDIB(orgpic));
	
	// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的腐蚀,其它的可以类推)
	if (::DIBNumColors(lpDIB) != 256)
	{
		// 提示用户
		AfxMessageBox("目前只支持256色位图的腐蚀!", /*"系统提示" ,*/ MB_ICONINFORMATION | MB_OK);

		// 解除锁定
		::GlobalUnlock((HGLOBAL)ChangeToHDIB(orgpic));
		
		// 返回
		return;
	}
	
	int nMode;
	
	// 创建对话框
	cDlgMorphErosion dlgPara;
	
	// 初始化变量值
	dlgPara.m_nMode = 0;
	
	// 显示对话框,提示用户设定腐蚀方向
	if (dlgPara.DoModal() != IDOK)
	{
		// 返回
		return;
	}
	
	// 获取用户设定的腐蚀方向
	nMode = dlgPara.m_nMode;

	int structure[3][3];
	if (nMode == 2)
	{
		structure[0][0]=dlgPara.m_nStructure1;
		structure[0][1]=dlgPara.m_nStructure2;
		structure[0][2]=dlgPara.m_nStructure3;
		structure[1][0]=dlgPara.m_nStructure4;
		structure[1][1]=dlgPara.m_nStructure5;
		structure[1][2]=dlgPara.m_nStructure6;
		structure[2][0]=dlgPara.m_nStructure7;
		structure[2][1]=dlgPara.m_nStructure8;
		structure[2][2]=dlgPara.m_nStructure9;
	}
	
	// 删除对话框
	delete dlgPara;	
	
	// 更改光标形状
	BeginWaitCursor();

	// 找到DIB图像象素起始位置
	lpDIBBits = ::FindDIBBits(lpDIB);
	int bmpWidth=WIDTHBYTES(::DIBWidth(lpDIB) * 8);
	
	// 调用ErosionDIB()函数腐蚀DIB
	if (OpenDIB(lpDIBBits, ::DIBWidth(lpDIB), ::DIBHeight(lpDIB), nMode , structure))
	{
		
		// 设置脏标记
		for (int i=dealpic.row-1;i>=0;i--)
			for (int j=0;j<dealpic.col;j++)
			{
				dealpic.p[dealpic.row-i-1][j]=*(lpDIBBits+i*bmpWidth+j);
			}
		
		// 更新视图
			dspace_2d(orgpic.p,orgpic.row,orgpic.col);
			orgpic=dealpic;
			if ((m_hDIB=ChangeToHDIB(dealpic))==NULL)
			{
				AfxMessageBox("不能显示!");		
				return ;
			}
			SaveHistory();
			InitDIBData();
			UpdateAllViews(NULL);
		
	}
	else
	{
		// 提示用户
		AfxMessageBox("分配内存失败或者图像中含有0和255之外的像素值!",/* "系统提示" , */MB_ICONINFORMATION | MB_OK);
	}
	
	// 解除锁定
	::GlobalUnlock((HGLOBAL) ChangeToHDIB(orgpic));

	// 恢复光标
	EndWaitCursor();
	
}

void CLinjunjuanDoc::OnMorphClose() 
{
		//腐蚀运算

	// 获取文档
	if (!flagpic)
	{
		AfxMessageBox("没有输入图象!");
		return;
	}
		dealpic.row=orgpic.row;
		dealpic.col=orgpic.col;
		if (!(dealpic.p=fspace_2d(dealpic.row,dealpic.col)))
		{
			AfxMessageBox("分配空间错误!");
			return;
		}

	
	// 指向DIB的指针
	LPSTR	lpDIB;

	// 指向DIB象素指针
	LPSTR   lpDIBBits;
	
	// 锁定DIB
	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) ChangeToHDIB(orgpic));
	
	// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的腐蚀,其它的可以类推)
	if (::DIBNumColors(lpDIB) != 256)
	{
		// 提示用户
		AfxMessageBox("目前只支持256色位图的腐蚀!", /*"系统提示" ,*/ MB_ICONINFORMATION | MB_OK);

		// 解除锁定
		::GlobalUnlock((HGLOBAL)ChangeToHDIB(orgpic));
		
		// 返回
		return;
	}
	
	int nMode;
	
	// 创建对话框
	cDlgMorphErosion dlgPara;
	
	// 初始化变量值
	dlgPara.m_nMode = 0;
	
	// 显示对话框,提示用户设定腐蚀方向
	if (dlgPara.DoModal() != IDOK)
	{
		// 返回
		return;
	}
	
	// 获取用户设定的腐蚀方向
	nMode = dlgPara.m_nMode;

	int structure[3][3];
	if (nMode == 2)
	{
		structure[0][0]=dlgPara.m_nStructure1;
		structure[0][1]=dlgPara.m_nStructure2;
		structure[0][2]=dlgPara.m_nStructure3;
		structure[1][0]=dlgPara.m_nStructure4;
		structure[1][1]=dlgPara.m_nStructure5;
		structure[1][2]=dlgPara.m_nStructure6;
		structure[2][0]=dlgPara.m_nStructure7;
		structure[2][1]=dlgPara.m_nStructure8;
		structure[2][2]=dlgPara.m_nStructure9;
	}
	
	// 删除对话框
	delete dlgPara;	
	
	// 更改光标形状
	BeginWaitCursor();

	// 找到DIB图像象素起始位置
	lpDIBBits = ::FindDIBBits(lpDIB);
	int bmpWidth=WIDTHBYTES(::DIBWidth(lpDIB) * 8);
	
	// 调用ErosionDIB()函数腐蚀DIB
	if (CloseDIB(lpDIBBits, WIDTHBYTES(::DIBWidth(lpDIB) * 8), ::DIBHeight(lpDIB), nMode , structure))
	{
		
		// 设置脏标记
		for (int i=dealpic.row-1;i>=0;i--)
			for (int j=0;j<dealpic.col;j++)
			{
				dealpic.p[dealpic.row-i-1][j]=*(lpDIBBits+i*bmpWidth+j);
			}
		
		// 更新视图
			dspace_2d(orgpic.p,orgpic.row,orgpic.col);
			orgpic=dealpic;
			if ((m_hDIB=ChangeToHDIB(dealpic))==NULL)
			{
				AfxMessageBox("不能显示!");		
				return ;
			}
			SaveHistory();
			InitDIBData();
			UpdateAllViews(NULL);
		
	}
	else
	{
		// 提示用户
		AfxMessageBox("分配内存失败或者图像中含有0和255之外的像素值!",/* "系统提示" , */MB_ICONINFORMATION | MB_OK);
	}
	
	// 解除锁定
	::GlobalUnlock((HGLOBAL) ChangeToHDIB(orgpic));

	// 恢复光标
	EndWaitCursor();
	
}

void CLinjunjuanDoc::OnMorphThining() 
{
		//腐蚀运算

	// 获取文档
	if (!flagpic)
	{
		AfxMessageBox("没有输入图象!");
		return;
	}
		dealpic.row=orgpic.row;
		dealpic.col=orgpic.col;
		if (!(dealpic.p=fspace_2d(dealpic.row,dealpic.col)))
		{
			AfxMessageBox("分配空间错误!");
			return;
		}

	
	// 指向DIB的指针
	LPSTR	lpDIB;

	// 指向DIB象素指针
	LPSTR   lpDIBBits;
	
	// 锁定DIB
	lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) ChangeToHDIB(orgpic));
	
	// 判断是否是8-bpp位图(这里为了方便,只处理8-bpp位图的腐蚀,其它的可以类推)
	if (::DIBNumColors(lpDIB) != 256)
	{
		// 提示用户
		AfxMessageBox("目前只支持256色位图的腐蚀!", /*"系统提示" ,*/ MB_ICONINFORMATION | MB_OK);

		// 解除锁定
		::GlobalUnlock((HGLOBAL)ChangeToHDIB(orgpic));
		
		// 返回
		return;
	}
	
	int nMode;
	
	// 创建对话框
	cDlgMorphErosion dlgPara;
	
	// 初始化变量值
	dlgPara.m_nMode = 0;
	
	// 显示对话框,提示用户设定腐蚀方向
	if (dlgPara.DoModal() != IDOK)
	{
		// 返回
		return;
	}
	
	// 获取用户设定的腐蚀方向
	nMode = dlgPara.m_nMode;

	int structure[3][3];
	if (nMode == 2)
	{
		structure[0][0]=dlgPara.m_nStructure1;
		structure[0][1]=dlgPara.m_nStructure2;
		structure[0][2]=dlgPara.m_nStructure3;
		structure[1][0]=dlgPara.m_nStructure4;
		structure[1][1]=dlgPara.m_nStructure5;
		structure[1][2]=dlgPara.m_nStructure6;
		structure[2][0]=dlgPara.m_nStructure7;
		structure[2][1]=dlgPara.m_nStructure8;
		structure[2][2]=dlgPara.m_nStructure9;
	}
	
	// 删除对话框
	delete dlgPara;	
	
	// 更改光标形状
	BeginWaitCursor();

	// 找到DIB图像象素起始位置
	lpDIBBits = ::FindDIBBits(lpDIB);
	int bmpWidth=WIDTHBYTES(::DIBWidth(lpDIB) * 8);
	
	// 调用ErosionDIB()函数腐蚀DIB
	if (ThiningDIB(lpDIBBits, WIDTHBYTES(::DIBWidth(lpDIB) * 8), ::DIBHeight(lpDIB)))
	{
		
		// 设置脏标记
		for (int i=dealpic.row-1;i>=0;i--)
			for (int j=0;j<dealpic.col;j++)
			{
				dealpic.p[dealpic.row-i-1][j]=*(lpDIBBits+i*bmpWidth+j);
			}
		
		// 更新视图
			dspace_2d(orgpic.p,orgpic.row,orgpic.col);
			orgpic=dealpic;
			if ((m_hDIB=ChangeToHDIB(dealpic))==NULL)
			{
				AfxMessageBox("不能显示!");		
				return ;
			}
			SaveHistory();
			InitDIBData();
			UpdateAllViews(NULL);
		
	}
	else
	{
		// 提示用户
		AfxMessageBox("分配内存失败或者图像中含有0和255之外的像素值!",/* "系统提示" , */MB_ICONINFORMATION | MB_OK);
	}
	
	// 解除锁定
	::GlobalUnlock((HGLOBAL) ChangeToHDIB(orgpic));

	// 恢复光标
	EndWaitCursor();
}

void CLinjunjuanDoc::OnEdgeContour() 
{
		//腐蚀运算

	// 获取文档
	if (!flagpic)
	{
		AfxMessageBox("没有输入图象!");
		return;
	}
		dealpic.row=orgpic.row;
		dealpic.col=orgpic.col;
		if (!(dealpic.p=fspace_2d(dealpic.row,dealpic.col)))
		{
			AfxMessageBox("分配空间错误!");
			return;
		}

	
	// 指向DIB的指针
	LPSTR	lpDIB;

⌨️ 快捷键说明

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