📄 data_compress_systemview.cpp
字号:
// 对图象进行巴特沃斯低通滤波
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 + -