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

📄 dip_systemview.cpp

📁 其中包括图像压缩的基本编码方法如Huffman编码算术编码JPEG 2000H.261压缩编码标准小波变换编码运动估计算法视频图象采集的VC实现等.
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	clsMorph.VErosion(pDoc->GetHDIB());

	// 重画视图
	Invalidate();

	// 设置脏标记
	pDoc->SetModifiedFlag(TRUE);
}


///////////////////////////////////////////
//	对图像实施垂直膨胀处理				 //	
///////////////////////////////////////////

void CDIP_SystemView::OnHDilation() 
{
	// 获取文档
	CDIP_SystemDoc* pDoc = GetDocument();

	// 对图象进行巴特沃斯低通滤波
	CMorph clsMorph;
	clsMorph.HDilation(pDoc->GetHDIB());

	// 重画视图
	Invalidate();

	// 设置脏标记
	pDoc->SetModifiedFlag(TRUE);
}


///////////////////////////////////////////
//	对图像实施垂直膨胀处理				 //	
///////////////////////////////////////////

void CDIP_SystemView::OnVDilation() 
{
	// 获取文档
	CDIP_SystemDoc* pDoc = GetDocument();

	// 对图象进行巴特沃斯低通滤波
	CMorph clsMorph;
	clsMorph.VDilation(pDoc->GetHDIB());

	// 重画视图
	Invalidate();

	// 设置脏标记
	pDoc->SetModifiedFlag(TRUE);
}


///////////////////////////////////////////
//	对图像实施全方向腐蚀				 //	
///////////////////////////////////////////

void CDIP_SystemView::OnVhErosion() 
{
	// 获取文档
	CDIP_SystemDoc* pDoc = GetDocument();

	// 对图象进行巴特沃斯低通滤波
	CMorph clsMorph;
	clsMorph.VHErosion(pDoc->GetHDIB());

	// 重画视图
	Invalidate();

	// 设置脏标记
	pDoc->SetModifiedFlag(TRUE);
}


///////////////////////////////////////////
//	对图像实施全方向膨胀				 //	
///////////////////////////////////////////

void CDIP_SystemView::OnVhDilation() 
{
	// 获取文档
	CDIP_SystemDoc* pDoc = GetDocument();

	// 对图象进行巴特沃斯低通滤波
	CMorph clsMorph;
	clsMorph.VHDilation(pDoc->GetHDIB());

	// 重画视图
	Invalidate();

	// 设置脏标记
	pDoc->SetModifiedFlag(TRUE);
}


///////////////////////////////////////////
//	对图像实施开运算处理				 //	
///////////////////////////////////////////

void CDIP_SystemView::OnOpenOperate() 
{
	// 获取文档
	CDIP_SystemDoc* pDoc = GetDocument();

	// 对图象进行巴特沃斯低通滤波
	CMorph clsMorph;
	clsMorph.OpenOperate(pDoc->GetHDIB());

	// 重画视图
	Invalidate();

	// 设置脏标记
	pDoc->SetModifiedFlag(TRUE);
}


///////////////////////////////////////////
//	对图像实施闭运算处理				 //	
///////////////////////////////////////////

void CDIP_SystemView::OnCloseOperate() 
{
	// 获取文档
	CDIP_SystemDoc* pDoc = GetDocument();

	// 对图象进行巴特沃斯低通滤波
	CMorph clsMorph;
	clsMorph.CloseOperate(pDoc->GetHDIB());

	// 重画视图
	Invalidate();

	// 设置脏标记
	pDoc->SetModifiedFlag(TRUE);
}


///////////////////////////////////////////
//	对图像实施细化处理					 //	
///////////////////////////////////////////

void CDIP_SystemView::OnThin() 
{
	// 获取文档
	CDIP_SystemDoc* pDoc = GetDocument();

	// 对图象进行巴特沃斯低通滤波
	CMorph clsMorph;
	clsMorph.Thin(pDoc->GetHDIB());

	// 重画视图
	Invalidate();

	// 设置脏标记
	pDoc->SetModifiedFlag(TRUE);
}


///////////////////////////////////////////
//	对图像实施粗化处理					 //	
///////////////////////////////////////////

void CDIP_SystemView::OnThick() 
{
	// 获取文档
	CDIP_SystemDoc* pDoc = GetDocument();

	// 对图象进行巴特沃斯低通滤波
	CMorph clsMorph;
	clsMorph.Thick(pDoc->GetHDIB());

	// 重画视图
	Invalidate();

	// 设置脏标记
	pDoc->SetModifiedFlag(TRUE);
}


///////////////////////////////////////////
//	对图像实施中轴变换					 //	
///////////////////////////////////////////

void CDIP_SystemView::OnMat() 
{
	// 获取文档
	CDIP_SystemDoc* pDoc = GetDocument();

	// 对图象进行巴特沃斯低通滤波
	CMorph clsMorph;
	clsMorph.MAT(pDoc->GetHDIB());

	// 重画视图
	Invalidate();

	// 设置脏标记
	pDoc->SetModifiedFlag(TRUE);
}

///////////////////////////[图像编码部分]////////////////////////////////////////////


///////////////////////////////////////////
//	对图像实施JPEG编码压缩				 //	
///////////////////////////////////////////

void CDIP_SystemView::OnJpegEncoding() 
{
	// 获取文档
	CDIP_SystemDoc* pDoc = GetDocument();
	
	if (pDoc->m_strCurrentFile == "")
	{
		AfxMessageBox("请先打开BMP位图文件再行压缩!");
		return;
	}

	// 检验位图是否保存
	if (pDoc->IsModified())
	{
		AfxMessageBox("请先保存原始BMP位图文件再行压缩!");
		return;
	}

	// 选择保存文件
    CFileDialog fileDlg(FALSE, "*.JPG", "*.JPG", NULL, "JPEG File (*.JPG)|*.JPG||", this);
	fileDlg.m_ofn.Flags |= OFN_FILEMUSTEXIST;
	fileDlg.m_ofn.lpstrTitle = "File to save as";

	// 保存压缩图象
	if (fileDlg.DoModal() == IDOK)
	{
		CCoding clsCoding;
		clsCoding.SaveJPG(pDoc, fileDlg.GetPathName());
	}            
}


///////////////////////////////////////////
//	对图像实施JPEG编码解压缩			 //	
///////////////////////////////////////////

void CDIP_SystemView::OnJpegDecoding() 
{
	// 选择打开文件
	CFileDialog fileDlg(TRUE, "*.JPG", "*.JPG", NULL, "JPEG File (*.JPG)|*.JPG||", this);
	fileDlg.m_ofn.Flags|=OFN_FILEMUSTEXIST;
	fileDlg.m_ofn.lpstrTitle="File to load";

	if (fileDlg.DoModal() == IDOK) 
	{
		// 获取文档
		CDIP_SystemDoc* pDoc = GetDocument();

		// 解压图象
		CCoding clsCoding;
		clsCoding.LoadJPG(pDoc->GetHDIB(), pDoc, fileDlg.GetPathName());

		// 重画视图
		Invalidate();
	}
}


///////////////////////////////////////////
//	对图像实施PCX编码压缩				 //	
///////////////////////////////////////////

void CDIP_SystemView::OnPCXEncoding() 
{
	// 获取文档
	CDIP_SystemDoc* pDoc = GetDocument();
	
	// 选择保存文件
    CFileDialog fileDlg(FALSE, "*.PCX", "*.PCX", NULL, "PCX File (*.PCX)|*.PCX||", this);
	fileDlg.m_ofn.Flags |= OFN_FILEMUSTEXIST;
	fileDlg.m_ofn.lpstrTitle = "File to save as";

	// 保存压缩图象
	if (fileDlg.DoModal() == IDOK)
	{
		CCoding clsCoding;
		clsCoding.DIBToPCX(pDoc->GetHDIB(), fileDlg.GetPathName());
	}            
}


///////////////////////////////////////////
//	对图像实施PCX编码解压缩				 //	
///////////////////////////////////////////

void CDIP_SystemView::OnPCXDecoding() 
{
	// 创建新DIB
	HDIB hNewDIB = NULL;
	
	// 获取文档
	CDIP_SystemDoc* pDoc = GetDocument();

	// 选择打开文件
	CFileDialog fileDlg(TRUE, "*.PCX", "*.PCX", NULL, "PCX File (*.PCX)|*.PCX||", this);
	fileDlg.m_ofn.Flags|=OFN_FILEMUSTEXIST;
	fileDlg.m_ofn.lpstrTitle="File to load";

	if (fileDlg.DoModal() == IDOK) 
	{
		// 获取文档
		CDIP_SystemDoc* pDoc = GetDocument();

		// 解压图象
		CCoding clsCoding;
		hNewDIB = clsCoding.PCXToDIB(fileDlg.GetPathName());

		// 判断处理是否成功
		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);
		}
	}
}


///////////////////////////////////////////
//	对图像实施哈夫曼编码				 //	
///////////////////////////////////////////

void CDIP_SystemView::OnHuffman() 
{
	// 获取文档
	CDIP_SystemDoc* pDoc = GetDocument();
	
	// 选择保存文件
    CFileDialog fileDlg(FALSE, "*.HUF", "*.HUF", NULL, "HUFFMAN File (*.HUF)|*.HUF||", this);
	fileDlg.m_ofn.Flags |= OFN_FILEMUSTEXIST;
	fileDlg.m_ofn.lpstrTitle = "File to save as";

	// 保存压缩图象
	if (fileDlg.DoModal() == IDOK)
	{
		CCoding clsCoding;
		clsCoding.Huffman(pDoc->GetHDIB(), fileDlg.GetPathName());
	}            
}


///////////////////////////////////////////
//	对图像实施仙农-弗诺编码				 //	
///////////////////////////////////////////

void CDIP_SystemView::OnShannonFannon() 
{
	// 获取文档
	CDIP_SystemDoc* pDoc = GetDocument();
	
	// 选择保存文件
    CFileDialog fileDlg(FALSE, "*.FAN", "*.FAN", NULL, "Shannon-Fannon File (*.FAN)|*.FAN||", this);
	fileDlg.m_ofn.Flags |= OFN_FILEMUSTEXIST;
	fileDlg.m_ofn.lpstrTitle = "File to save as";

	// 保存压缩图象
	if (fileDlg.DoModal() == IDOK)
	{
		CCoding clsCoding;
		clsCoding.Shannon_Fannon(pDoc->GetHDIB(), fileDlg.GetPathName());
	}            
}


///////////////////////////////////////////
//	对图像实施GIF编码压缩				 //	
///////////////////////////////////////////

void CDIP_SystemView::OnLzwEncoding() 
{
	// 获取文档
	CDIP_SystemDoc* pDoc = GetDocument();
	
	// 选择保存文件
    CFileDialog fileDlg(FALSE, "*.GIF", "*.GIF", NULL, "GIF (*.GIF)|*.GIF||", this);
	fileDlg.m_ofn.Flags |= OFN_FILEMUSTEXIST;
	fileDlg.m_ofn.lpstrTitle = "File to save as";

	// 保存压缩图象
	if (fileDlg.DoModal() == IDOK)
	{
		CFile file;
		file.Open(fileDlg.GetPathName(), CFile::modeCreate|CFile::modeReadWrite);
		CCoding clsCoding;
		clsCoding.DIBToGIF(pDoc->GetHDIB(), file, TRUE);
		file.Close();
	}            
}


///////////////////////////////////////////
//	对图像实施GIF编码解压缩				 //	
///////////////////////////////////////////

void CDIP_SystemView::OnLzwDecoding() 
{
	// 创建新DIB
	HDIB hNewDIB = NULL;
	
	// 获取文档
	CDIP_SystemDoc* pDoc = GetDocument();

	// 选择保存文件
    CFileDialog fileDlg(TRUE, "*.GIF", "*.GIF", NULL, "GIF文件 (*.GIF)|*.GIF||", this);
	fileDlg.m_ofn.Flags |= OFN_FILEMUSTEXIST;
	fileDlg.m_ofn.lpstrTitle = "Open File";

	// 保存压缩图象
	if (fileDlg.DoModal() == IDOK)
	{
		// 调用ZoomDIB()函数获取缩小后的DIB
		CCoding clsCoding;
		CFile file;
		file.Open(fileDlg.GetPathName(),CFile::modeReadWrite);
		hNewDIB = clsCoding.GIFToDIB(file);
		file.Close();

		// 判断缩放是否成功
		if (hNewDIB != NULL)
		{		
			// 替换DIB,同时释放旧DIB对象
			pDoc->ReplaceHDIB(hNewDIB);
	
			// 更新DIB大小和调色板
			pDoc->InitDIBData();
		
			// 重新设置滚动视图大小
			SetScrollSizes(MM_TEXT, pDoc->GetDocSize());

			// 更新视图
			pDoc->UpdateAllViews(NULL);
		}
		else
		{
			// 提示用户
			MessageBox("分配内存失败!", "系统提示" , MB_ICONINFORMATION | MB_OK);
		}
	}
}


///////////////////////////////////////////
//	嵌入水印							 //	
///////////////////////////////////////////

void CDIP_SystemView::OnSetWatermarking() 
{
	// 获取文档
	CDIP_SystemDoc* pDoc = GetDocument();

	// 保存压缩图象
	CWaterMarking clsWaterMarking;
	clsWaterMarking.Set(pDoc->GetHDIB());
}


///////////////////////////////////////////
//	检测水印							 //	
///////////////////////////////////////////

void CDIP_SystemView::OnGetWatermarking() 
{
	// 获取文档
	CDIP_SystemDoc* pDoc = GetDocument();
	
	// 选择保存文件
    CFileDialog fileDlg(FALSE, "*.BMP", "*.BMP", NULL, "水印文件(*.BMP)|*.BMP||", this);
	fileDlg.m_ofn.Flags |= OFN_FILEMUSTEXIST;
	fileDlg.m_ofn.lpstrTitle = "File to save as";

	// 保存压缩图象
	if (fileDlg.DoModal() == IDOK)
	{
		CFile file;
		file.Open(fileDlg.GetPathName(), CFile::modeCreate | CFile::modeReadWrite);
		CWaterMarking clsWaterMarking;
		clsWaterMarking.Get(pDoc->GetHDIB(), file);
		file.Close();
	}            
}


///////////////////////////////////////////
//	小波分解							 //	
///////////////////////////////////////////

void CDIP_SystemView::OnDwt() 
{
	// 获取文档
	CDIP_SystemDoc* pDoc = GetDocument();

	// 对图象进行巴特沃斯低通滤波
	CFreqCalculate clsFreqCalculate;
	clsFreqCalculate.DIBDWT(pDoc->GetHDIB());

	// 重画视图
	Invalidate();

	// 设置脏标记
	pDoc->SetModifiedFlag(TRUE);
}


///////////////////////////////////////////
//	小波重构							 //	
///////////////////////////////////////////

void CDIP_SystemView::OnIdwt() 
{
	// 获取文档
	CDIP_SystemDoc* pDoc = GetDocument();

	// 对图象进行巴特沃斯低通滤波
	CFreqCalculate clsFreqCalculate;
	clsFreqCalculate.DIBIDWT(pDoc->GetHDIB());

	// 重画视图
	Invalidate();

	// 设置脏标记
	pDoc->SetModifiedFlag(TRUE);
}

⌨️ 快捷键说明

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