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

📄 data_compress_systemview.cpp

📁 各种数据压缩和解压的源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:

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

	// 重画视图
	Invalidate();

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


///////////////////////////////////////////
//	对图像实施垂直腐蚀处理				 //	
///////////////////////////////////////////

void CData_Compress_SystemView::OnVErosion() 
{
	// 获取文档
	CData_Compress_SystemDoc* pDoc = GetDocument();

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

	// 重画视图
	Invalidate();

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


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

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

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

	// 重画视图
	Invalidate();

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


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

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

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

	// 重画视图
	Invalidate();

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


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

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

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

	// 重画视图
	Invalidate();

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


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

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

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

	// 重画视图
	Invalidate();

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


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

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

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

	// 重画视图
	Invalidate();

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


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

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

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

	// 重画视图
	Invalidate();

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


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

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

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

	// 重画视图
	Invalidate();

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


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

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

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

	// 重画视图
	Invalidate();

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


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

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

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

	// 重画视图
	Invalidate();

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

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


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

void CData_Compress_SystemView::OnJpegEncoding1() 
{
	CData_Compress_SystemView::jpegcode(30);
}
void CData_Compress_SystemView::OnJpegEncoding() 
{
           jpegcode(50);
}
void CData_Compress_SystemView::OnJpegEncoding3() 
{
           jpegcode(80);
}


void CData_Compress_SystemView::jpegcode(int quality)
{
		// 获取文档
	CData_Compress_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(),quality);
	} 
}
///////////////////////////////////////////
//	对图像实施JPEG编码解压缩			 //	
///////////////////////////////////////////

void CData_Compress_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) 
	{
		// 获取文档
		CData_Compress_SystemDoc* pDoc = GetDocument();

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

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


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

void CData_Compress_SystemView::OnPCXEncoding() 
{
	// 获取文档
	CData_Compress_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 CData_Compress_SystemView::OnPCXDecoding() 
{
	// 创建新DIB
	HDIB hNewDIB = NULL;
	
	// 获取文档
	CData_Compress_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) 
	{
		// 获取文档
		CData_Compress_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 CData_Compress_SystemView::OnHuffman() 
{
	// 获取文档
	CData_Compress_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 CData_Compress_SystemView::OnShannonFannon() 
{
	// 获取文档
	CData_Compress_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());
	}            
}


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

void CData_Compress_SystemView::OnLzwEncoding() 
{
	// 获取文档
	CData_Compress_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 CData_Compress_SystemView::OnLzwDecoding() 
{
	// 创建新DIB
	HDIB hNewDIB = NULL;
	
	// 获取文档
	CData_Compress_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 CData_Compress_SystemView::OnSetWatermarking() 
{
	// 获取文档
	CData_Compress_SystemDoc* pDoc = GetDocument();

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


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

void CData_Compress_SystemView::OnGetWatermarking() 
{
	// 获取文档
	CData_Compress_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();
	}            
}

⌨️ 快捷键说明

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