mainfrm.cpp
来自「一个非常全的vc编程的原程序代码是关于图像处理的!」· C++ 代码 · 共 2,610 行 · 第 1/5 页
CPP
2,610 行
MessageBox("请先打开一个窗口!", "Error");
return;
}
CViewDIBDoc* pDoc = (CViewDIBDoc*)CWnd->GetActiveDocument();
if(pDoc == NULL){
MessageBox("请先打开一个Bmp文件!", "Error");
return;
}
if(pDoc->m_operFlag == TRUE){
m_AttentionDlg.DoModal();
if(pDoc->m_operFlag == TRUE)
return;
}
int BitCount = pDoc->m_pDib->GetBitCount();
if((BitCount != 8) && (BitCount != 24)){
MessageBox("此操作只能用于处理灰度图或24位真彩色图!", "Attention");
return;
}
//save old DIB
pDoc->m_operFlag = TRUE;
pDoc->m_pDibTmp = (CDib*)(new CDib());
pDoc->m_pDibTmp->Create(pDoc->m_pDib->m_hBitmap);
pDoc->m_pDib->LaplaceEdgeDetect(1);
CDC* pDC = CWnd->GetDC();
CViewDIBView* pView = (CViewDIBView*)CWnd->GetActiveView();
CWnd->Invalidate();
return;
}
void CMainFrame::OnMenuLap2()
{
// TODO: Add your command handler code here
CMDIChildWnd* CWnd = MDIGetActive(NULL);
if(CWnd == NULL){
MessageBox("请先打开一个窗口!", "Error");
return;
}
CViewDIBDoc* pDoc = (CViewDIBDoc*)CWnd->GetActiveDocument();
if(pDoc == NULL){
MessageBox("请先打开一个Bmp文件!", "Error");
return;
}
if(pDoc->m_operFlag == TRUE){
m_AttentionDlg.DoModal();
if(pDoc->m_operFlag == TRUE)
return;
}
int BitCount = pDoc->m_pDib->GetBitCount();
if((BitCount != 8) && (BitCount != 24)){
MessageBox("此操作只能用于处理灰度图或24位真彩色图!", "Attention");
return;
}
//save old DIB
pDoc->m_operFlag = TRUE;
pDoc->m_pDibTmp = (CDib*)(new CDib());
pDoc->m_pDibTmp->Create(pDoc->m_pDib->m_hBitmap);
pDoc->m_pDib->LaplaceEdgeDetect(2);
CDC* pDC = CWnd->GetDC();
CViewDIBView* pView = (CViewDIBView*)CWnd->GetActiveView();
CWnd->Invalidate();
return;
}
void CMainFrame::OnMenuLap3()
{
// TODO: Add your command handler code here
CMDIChildWnd* CWnd = MDIGetActive(NULL);
if(CWnd == NULL){
MessageBox("请先打开一个窗口!", "Error");
return;
}
CViewDIBDoc* pDoc = (CViewDIBDoc*)CWnd->GetActiveDocument();
if(pDoc == NULL){
MessageBox("请先打开一个Bmp文件!", "Error");
return;
}
if(pDoc->m_operFlag == TRUE){
m_AttentionDlg.DoModal();
if(pDoc->m_operFlag == TRUE)
return;
}
int BitCount = pDoc->m_pDib->GetBitCount();
if((BitCount != 8) && (BitCount != 24)){
MessageBox("此操作只能用于处理灰度图或24位真彩色图!", "Attention");
return;
}
//save old DIB
pDoc->m_operFlag = TRUE;
pDoc->m_pDibTmp = (CDib*)(new CDib());
pDoc->m_pDibTmp->Create(pDoc->m_pDib->m_hBitmap);
pDoc->m_pDib->LaplaceEdgeDetect(3);
CDC* pDC = CWnd->GetDC();
CViewDIBView* pView = (CViewDIBView*)CWnd->GetActiveView();
CWnd->Invalidate();
return;
}
void CMainFrame::OnMenuSobel1()
{
// TODO: Add your command handler code here
CMDIChildWnd* CWnd = MDIGetActive(NULL);
if(CWnd == NULL){
MessageBox("请先打开一个窗口!", "Error");
return;
}
CViewDIBDoc* pDoc = (CViewDIBDoc*)CWnd->GetActiveDocument();
if(pDoc == NULL){
MessageBox("请先打开一个Bmp文件!", "Error");
return;
}
if(pDoc->m_operFlag == TRUE){
m_AttentionDlg.DoModal();
if(pDoc->m_operFlag == TRUE)
return;
}
int BitCount = pDoc->m_pDib->GetBitCount();
if((BitCount != 8) && (BitCount != 24)){
MessageBox("此操作只能用于处理灰度图或24位真彩色图!", "Attention");
return;
}
//save old DIB
pDoc->m_operFlag = TRUE;
pDoc->m_pDibTmp = (CDib*)(new CDib());
pDoc->m_pDibTmp->Create(pDoc->m_pDib->m_hBitmap);
pDoc->m_pDib->SobelEdgeDetect(1);
CDC* pDC = CWnd->GetDC();
CViewDIBView* pView = (CViewDIBView*)CWnd->GetActiveView();
CWnd->Invalidate();
return;
}
void CMainFrame::OnMenuSobel2()
{
// TODO: Add your command handler code here
CMDIChildWnd* CWnd = MDIGetActive(NULL);
if(CWnd == NULL){
MessageBox("请先打开一个窗口!", "Error");
return;
}
CViewDIBDoc* pDoc = (CViewDIBDoc*)CWnd->GetActiveDocument();
if(pDoc == NULL){
MessageBox("请先打开一个Bmp文件!", "Error");
return;
}
if(pDoc->m_operFlag == TRUE){
m_AttentionDlg.DoModal();
if(pDoc->m_operFlag == TRUE)
return;
}
int BitCount = pDoc->m_pDib->GetBitCount();
if((BitCount != 8) && (BitCount != 24)){
MessageBox("此操作只能用于处理灰度图或24位真彩色图!", "Attention");
return;
}
//save old DIB
pDoc->m_operFlag = TRUE;
pDoc->m_pDibTmp = (CDib*)(new CDib());
pDoc->m_pDibTmp->Create(pDoc->m_pDib->m_hBitmap);
pDoc->m_pDib->SobelEdgeDetect(2);
CDC* pDC = CWnd->GetDC();
CViewDIBView* pView = (CViewDIBView*)CWnd->GetActiveView();
CWnd->Invalidate();
return;
}
void CMainFrame::OnMenuBlur()
{
// TODO: Add your command handler code here
CMDIChildWnd* CWnd = MDIGetActive(NULL);
if(CWnd == NULL){
MessageBox("请先打开一个窗口!", "Error");
return;
}
CViewDIBDoc* pDoc = (CViewDIBDoc*)CWnd->GetActiveDocument();
if(pDoc == NULL){
MessageBox("请先打开一个Bmp文件!", "Error");
return;
}
if(pDoc->m_operFlag == TRUE){
m_AttentionDlg.DoModal();
if(pDoc->m_operFlag == TRUE)
return;
}
int BitCount = pDoc->m_pDib->GetBitCount();
if((BitCount != 8) && (BitCount != 24)){
MessageBox("此操作只能用于处理灰度图或24位真彩色图!", "Attention");
return;
}
//save old DIB
pDoc->m_operFlag = TRUE;
pDoc->m_pDibTmp = (CDib*)(new CDib());
pDoc->m_pDibTmp->Create(pDoc->m_pDib->m_hBitmap);
pDoc->m_pDib->Blur();
CDC* pDC = CWnd->GetDC();
CViewDIBView* pView = (CViewDIBView*)CWnd->GetActiveView();
CWnd->Invalidate();
return;
}
void CMainFrame::OnMenuAffine()
{
// TODO: Add your command handler code here
CMDIChildWnd* CWnd = MDIGetActive(NULL);
if(CWnd == NULL){
MessageBox("请先打开一个窗口!", "Error");
return;
}
CViewDIBDoc* pDoc = (CViewDIBDoc*)CWnd->GetActiveDocument();
if(pDoc == NULL){
MessageBox("请先打开一个Bmp文件!", "Error");
return;
}
if(pDoc->m_operFlag == TRUE){
m_AttentionDlg.DoModal();
if(pDoc->m_operFlag == TRUE)
return;
}
int BitCount = pDoc->m_pDib->GetBitCount();
if((BitCount == 1) || (BitCount == 4)){
MessageBox("此操作只能用于处理灰度图或真彩色图!", "Attention");
return;
}
//save old DIB
pDoc->m_operFlag = TRUE;
pDoc->m_pDibTmp = (CDib*)(new CDib());
pDoc->m_pDibTmp->Create(pDoc->m_pDib->m_hBitmap);
m_AffineDlg.m_mode = NEAREST;
m_AffineDlg.DoModal();
CDC* pDC = CWnd->GetDC();
CViewDIBView* pView = (CViewDIBView*)CWnd->GetActiveView();
CWnd->Invalidate();
return;
}
void CMainFrame::OnAffine(int mode)
{
CMDIChildWnd* CWnd = MDIGetActive(NULL);
CViewDIBDoc* pDoc = (CViewDIBDoc*)CWnd->GetActiveDocument();
CViewDIBView* pView = (CViewDIBView*)CWnd->GetActiveView();
pDoc->m_operFlag = TRUE;
pDoc->m_pDib->Affine( m_AffineDlg.m_x,
m_AffineDlg.m_y,
m_AffineDlg.m_wig,
m_AffineDlg.m_slue,
mode);
CSize sizeTotal(pDoc->m_pDib->GetWidth(), pDoc->m_pDib->GetHeight());
pView->SetScrollSizes(MM_TEXT, sizeTotal);
CDC* pDC = CWnd->GetDC();
CWnd->Invalidate();
}
void CMainFrame::OnMenuChangeCanvasSize()
{
// TODO: Add your command handler code here
CMDIChildWnd* CWnd = MDIGetActive(NULL);
if(CWnd == NULL){
MessageBox("请先打开一个窗口!", "Error");
return;
}
CViewDIBDoc* pDoc = (CViewDIBDoc*)CWnd->GetActiveDocument();
if(pDoc == NULL){
MessageBox("请先打开一个Bmp文件!", "Error");
return;
}
if(pDoc->m_operFlag == TRUE){
m_AttentionDlg.DoModal();
if(pDoc->m_operFlag == TRUE)
return;
}
//save old DIB
pDoc->m_operFlag = TRUE;
pDoc->m_pDibTmp = (CDib*)(new CDib());
pDoc->m_pDibTmp->Create(pDoc->m_pDib->m_hBitmap);
m_CanvasSizeDlg.DoModal();
CDC* pDC=CWnd->GetDC();
CViewDIBView* pView = (CViewDIBView*)CWnd->GetActiveView();
CWnd->Invalidate();
return;
}
void CMainFrame::OnChangeCanvasSize()
{
CMDIChildWnd* CWnd = MDIGetActive(NULL);
CViewDIBDoc* pDoc = (CViewDIBDoc*)CWnd->GetActiveDocument();
CViewDIBView* pView = (CViewDIBView*)CWnd->GetActiveView();
pDoc->m_operFlag = TRUE;
pDoc->m_pDib->ChangeCanvasSize(m_CanvasSizeDlg.m_Width,
m_CanvasSizeDlg.m_Height,
m_CanvasSizeDlg.m_id);
CSize sizeTotal(pDoc->m_pDib->GetWidth(), pDoc->m_pDib->GetHeight());
pView->SetScrollSizes(MM_TEXT,sizeTotal);
CDC* pDC=CWnd->GetDC();
CWnd->Invalidate();
return;
}
void CMainFrame::OnMenuAffineInterpolation()
{
// TODO: Add your command handler code here
CMDIChildWnd* CWnd = MDIGetActive(NULL);
if(CWnd == NULL){
MessageBox("请先打开一个窗口!", "Error");
return;
}
CViewDIBDoc* pDoc = (CViewDIBDoc*)CWnd->GetActiveDocument();
if(pDoc == NULL){
MessageBox("请先打开一个Bmp文件!", "Error");
return;
}
if(pDoc->m_operFlag == TRUE){
m_AttentionDlg.DoModal();
if(pDoc->m_operFlag == TRUE)
return;
}
int BitCount = pDoc->m_pDib->GetBitCount();
if((BitCount == 1) || (BitCount == 4)){
MessageBox("此操作只能用于处理灰度图或真彩色图!", "Attention");
return;
}
//save old DIB
pDoc->m_operFlag = TRUE;
pDoc->m_pDibTmp = (CDib*)(new CDib());
pDoc->m_pDibTmp->Create(pDoc->m_pDib->m_hBitmap);
m_AffineDlg.m_mode = BIINTERPO;
m_AffineDlg.DoModal();
CDC* pDC=CWnd->GetDC();
CViewDIBView* pView = (CViewDIBView*)CWnd->GetActiveView();
CWnd->Invalidate();
return;
}
void CMainFrame::OnMenuMedianFilter()
{
// TODO: Add your command handler code here
CMDIChildWnd* CWnd = MDIGetActive(NULL);
if(CWnd == NULL){
MessageBox("请先打开一个窗口!", "Error");
return;
}
CViewDIBDoc* pDoc = (CViewDIBDoc*)CWnd->GetActiveDocument();
if(pDoc == NULL){
MessageBox("请先打开一个Bmp文件!", "Error");
return;
}
if(pDoc->m_operFlag == TRUE){
m_AttentionDlg.DoModal();
if(pDoc->m_operFlag == TRUE)
return;
}
int BitCount = pDoc->m_pDib->GetBitCount();
if((BitCount != 8) && (BitCount != 24)){
MessageBox("此操作只能用于处理灰度图或24位真彩色图!", "Attention");
return;
}
//save old DIB
pDoc->m_operFlag = TRUE;
pDoc->m_pDibTmp = (CDib*)(new CDib());
pDoc->m_pDibTmp->Create(pDoc->m_pDib->m_hBitmap);
pDoc->m_pDib->MedianFilter();
CDC* pDC = CWnd->GetDC();
CViewDIBView* pView = (CViewDIBView*)CWnd->GetActiveView();
CWnd->Invalidate();
return;
}
void CMainFrame::OnMenuSobel3()
{
// TODO: Add your command handler code here
CMDIChildWnd* CWnd = MDIGetActive(NULL);
if(CWnd == NULL){
MessageBox("请先打开一个窗口!", "Error");
return;
}
CViewDIBDoc* pDoc = (CViewDIBDoc*)CWnd->GetActiveDocument();
if(pDoc == NULL){
MessageBox("请先打开一个Bmp文件!", "Error");
return;
}
if(pDoc->m_operFlag == TRUE){
m_AttentionDlg.DoModal();
if(pDoc->m_operFlag == TRUE)
return;
}
int BitCount = pDoc->m_pDib->GetBitCount();
if((BitCount != 8) && (BitCount != 24)){
MessageBox("此操作只能用于处理灰度图或24位真彩色图!", "Attention");
return;
}
//save old DIB
pDoc->m_operFlag = TRUE;
pDoc->m_pDibTmp = (CDib*)(new CDib());
pDoc->m_pDibTmp->Create(pDoc->m_pDib->m_hBitmap);
pDoc->m_pDib->SobelEdgeDetect(3);
CDC* pDC = CWnd->GetDC();
CViewDIBView* pView = (CViewDIBView*)CWnd->GetActiveView();
CWnd->Invalidate();
return;
}
void CMainFrame::OnMenuErosion()
{
// TODO: Add your command handler code here
CMDIChildWnd* CWnd = MDIGetActive(NULL);
if(CWnd == NULL){
MessageBox("请先打开一个窗口!", "Error");
return;
}
CViewDIBDoc* pDoc = (CViewDIBDoc*)CWnd->GetActiveDocument();
if(pDoc == NULL){
MessageBox("请先打开一个Bmp文件!", "Error");
return;
}
if(pDoc->m_operFlag == TRUE){
m_AttentionDlg.DoModal();
if(pDoc->m_operFlag == TRUE)
return;
}
int BitCount = pDoc->m_pDib->GetBitCount();
if((BitCount != 8) && (BitCount != 24)){
MessageBox("此操作只能用于处理灰度图或24位真彩色图!", "Attention");
return;
}
if(!pDoc->m_pDib->IsBinary()){
MessageBox("此操作只能处理二值图。", "Error");
return;
}
//save old DIB
pDoc->m_operFlag = TRUE;
pDoc->m_pDibTmp = (CDib*)(new CDib());
pDoc->m_pDibTmp->Create(pDoc->m_pDib->m_hBitmap);
pDoc->m_pDib->Erosion
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?