亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dipdoc.cpp

?? VC++實際編程的源代碼 多種圖像邊緣檢測與分割處理
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
// DipDoc.cpp : implementation of the CDipDoc class
//

#include "stdafx.h"
#include "Dip.h"

#include "DipDoc.h"
#include "MainFrm.h"
#include "ChildFrm.h"
#include "DipView.h"
#include "PointPro.h"
#include "AreaPro.h"

#include "DlgLinerPara.h"
#include "DlgPointStre.h"
#include "DlgThreshold.h"
#include "DlgSmooth.h"
#include "EdgeDetDlg.h"
#include "LapDlg.h"
#include "DlgColor.h"
#include "DlgMedianFilter.h"
#include "DlgSeedFill.h"
#include "DlgProject.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

extern char szFilter[];

/////////////////////////////////////////////////////////////////////////////
// CDipDoc

IMPLEMENT_DYNCREATE(CDipDoc, CDocument)

BEGIN_MESSAGE_MAP(CDipDoc, CDocument)
	//{{AFX_MSG_MAP(CDipDoc)
	ON_COMMAND(ID_FILE_NEW, OnFileNew)
	ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
	ON_COMMAND(ID_FILE_SAVE_AS, OnFileSaveAs)
	ON_COMMAND(ID_POINT_EQUA, OnPointEqua)
	ON_COMMAND(ID_POINT_LINER, OnPointLiner)
	ON_COMMAND(ID_POINT_STRE, OnPointStre)
	ON_COMMAND(ID_POINT_CONTAUTO, OnPointContauto)
	ON_COMMAND(ID_POINT_THRE, OnPointThre)
	ON_COMMAND(ID_ENHA_SMOOTH, OnEnhaSmooth)
	ON_COMMAND(ID_POINT_PSEUDOCOLOR, OnPointPseudocolor)
	ON_COMMAND(ID_ENHA_GRADSHARP, OnEnhaGradsharp)
	ON_COMMAND(ID_ENHA_TEMPSHARP, OnEnhaTempsharp)
	ON_COMMAND(ID_ENHA_LAPSHARP, OnEnhaLapsharp)
	ON_COMMAND(ID_POINT_INVERT, OnPointInvert)
	ON_COMMAND(ID_CHANNEL_SPLIT, OnChannelSplit)
	ON_UPDATE_COMMAND_UI(ID_CHANNEL_SPLIT, OnUpdateChannelSplit)
	ON_COMMAND(ID_CHANNEL_BLUE, OnChannelBlue)
	ON_UPDATE_COMMAND_UI(ID_CHANNEL_BLUE, OnUpdateChannelBlue)
	ON_COMMAND(ID_CHANNEL_GREEN, OnChannelGreen)
	ON_COMMAND(ID_CHANNEL_MIXED, OnChannelMixed)
	ON_COMMAND(ID_CHANNEL_RED, OnChannelRed)
	ON_UPDATE_COMMAND_UI(ID_CHANNEL_GREEN, OnUpdateChannelGreen)
	ON_UPDATE_COMMAND_UI(ID_CHANNEL_MIXED, OnUpdateChannelMixed)
	ON_UPDATE_COMMAND_UI(ID_CHANNEL_RED, OnUpdateChannelRed)
	ON_UPDATE_COMMAND_UI(ID_POINT_THRE, OnUpdatePointThre)
	ON_UPDATE_COMMAND_UI(ID_POINT_PSEUDOCOLOR, OnUpdatePointPseudocolor)
	ON_COMMAND(ID_ENHA_MidianF, OnEnhaMidianF)
	ON_COMMAND(ID_EDGE_TRACE, OnEdgeTrace)
	ON_UPDATE_COMMAND_UI(ID_EDGE_TRACE, OnUpdateEdgeTrace)
	ON_COMMAND(ID_EDGE_CONTOUR, OnEdgeContour)
	ON_COMMAND(ID_EDGE_FILL, OnEdgeFill)
	ON_UPDATE_COMMAND_UI(ID_EDGE_CONTOUR, OnUpdateEdgeContour)
	ON_COMMAND(ID_DETECT_MINUS, OnDetectMinus)
	ON_UPDATE_COMMAND_UI(ID_DETECT_MINUS, OnUpdateDetectMinus)
	ON_COMMAND(ID_DETECT_TEMPLATE, OnDetectTemplate)
	ON_UPDATE_COMMAND_UI(ID_DETECT_TEMPLATE, OnUpdateDetectTemplate)
	ON_COMMAND(ID_DETECT_PROJECT, OnDetectProject)
	ON_UPDATE_COMMAND_UI(ID_DETECT_PROJECT, OnUpdateDetectProject)
	ON_UPDATE_COMMAND_UI(ID_EDGE_FILL, OnUpdateEdgeFill)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDipDoc construction/destruction

CDipDoc::CDipDoc()
{
	// TODO: add one-time construction code here
	m_pDibObject = NULL;
	m_bImageLoaded = FALSE;
	m_nColorIndex = 0;
	m_bBinary = FALSE;
	m_lHeight = 0;
	m_lWidth = 0;
}

CDipDoc::~CDipDoc()
{
	if(m_pDibObject != NULL)
	{
		delete m_pDibObject;
		m_pDibObject = NULL;
	}
}

BOOL CDipDoc::OnNewDocument()
{
	if (!CDocument::OnNewDocument())
		return FALSE;

	// TODO: add reinitialization code here
	// (SDI documents will reuse this document)

	return TRUE;
}



/////////////////////////////////////////////////////////////////////////////
// CDipDoc serialization

void CDipDoc::Serialize(CArchive& ar)
{
	if (ar.IsStoring())
	{
		// TODO: add storing code here
	}
	else
	{
		// TODO: add loading code here
	}
}

/////////////////////////////////////////////////////////////////////////////
// CDipDoc diagnostics

#ifdef _DEBUG
void CDipDoc::AssertValid() const
{
	CDocument::AssertValid();
}

void CDipDoc::Dump(CDumpContext& dc) const
{
	CDocument::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CDipDoc commands

void CDipDoc::OnFileNew() 
{
	// TODO: Add your command handler code here
	
}

void CDipDoc::OnFileOpen() 
{
	// TODO: Add your command handler code here
	static int nIndex = 1;

	CFileDialog FileDlg( TRUE, NULL, NULL, OFN_HIDEREADONLY, szFilter );
	FileDlg.m_ofn.nFilterIndex = (DWORD) nIndex;

	if( FileDlg.DoModal() == IDOK )
	{
		CString strPathName = FileDlg.GetPathName();
		AfxGetApp()->OpenDocumentFile( strPathName );
		nIndex = (int) FileDlg.m_ofn.nFilterIndex;
		if( !LoadImageToDocument() )
		{
			AfxMessageBox("無法載入圖像文件!");
			return;
		}
	}
}

BOOL CDipDoc::LoadImageToDocument()
{
	CString strPathName = GetPathName();
	
	//設置等待光標
	BeginWaitCursor();
	m_pDibObject = new CDibObject( strPathName.GetBuffer(3) );
	//取消等待光標
	EndWaitCursor();

	//讀入圖像文件失敗
	if( m_pDibObject == NULL )
	{
		AfxMessageBox("無法創建圖像類對象!");
		//返回FALSE
		return(FALSE);
	}

	//獲取主框架窗口指針
	CMainFrame *pFrame = (CMainFrame *) AfxGetMainWnd();
	//獲取子框架窗口指針
	CChildFrame *pChild = (CChildFrame *) pFrame->MDIGetActive();
	pChild->m_nWidth = m_pDibObject->GetWidth(); 
	pChild->m_nHeight = m_pDibObject->GetHeight();
	pChild->SetWindowPos( NULL, 0, 0, pChild->m_nWidth + 12, 
		pChild->m_nHeight + 38, SWP_NOZORDER | SWP_NOMOVE );
	

	//讀入圖像文件成功,設置相應變量
	m_bImageLoaded = TRUE;

	//返回TRUE
	return(TRUE);
}


void CDipDoc::OnFileSaveAs() 
{
	// TODO: Add your command handler code here
	static int nIndex = 1;
	
	CFileDialog DialogSaveAs( FALSE, NULL, m_pDibObject->GetImageName(),
							OFN_HIDEREADONLY, szFilter );

	DialogSaveAs.m_ofn.nFilterIndex = (DWORD) nIndex;
	
	if( DialogSaveAs.DoModal() == IDOK )
	{
		CMainFrame *pMainFrame = ( CMainFrame * )AfxGetMainWnd();
		CChildFrame *pChildFrame = ( CChildFrame * )pMainFrame->MDIGetActive();
		CDipView *pDipView = ( CDipView * )pChildFrame->GetActiveView();
		
		nIndex = (int) DialogSaveAs.m_ofn.nFilterIndex;
		if( nIndex == 5 )
		{
			if( m_pDibObject->GetNumBits() != 24 )
			{
				AfxMessageBox("必須是24位真彩色圖像才能存為JPEG格式!");
				return;
			}
		}

		if( m_pDibObject != NULL )
		{
			CString strPathName = DialogSaveAs.GetPathName();
			int nFindIndex = strPathName.Find(".");
			if( nFindIndex != -1)
				strPathName = strPathName.Left( nFindIndex );
			strPathName += CDibObject::szExtensions[ nIndex - 1 ];
			//m_pDibObject->ProcessImageHeader();
			//m_pDibObject->ProcessPalette();
			m_pDibObject->Save( strPathName );

			CString strFileName = DialogSaveAs.GetFileName();
			nFindIndex = strFileName.Find(".");
			if ( nFindIndex != -1 )
				strFileName = strFileName.Left( nFindIndex );
			strFileName += CDibObject::szExtensions[ nIndex - 1 ];
			pChildFrame->SetWindowText( strFileName );

			SetPathName( strPathName );
			if( nIndex == 5 )
			{
				m_pDibObject->Load( strPathName );
				pDipView->InvalidateRect( NULL, FALSE );
				pDipView->UpdateWindow();
			}
		}
	}
}

void CDipDoc::OnPointEqua() 
{
	//創建點處理CPointPro類對象
	CPointPro PointOperation( m_pDibObject );
	
	// 更改光標形狀
	BeginWaitCursor();

	// 調用LinerTrans()函數進行線性變換
	PointOperation.InteEqualize( m_pDibObject );

	// 設置臟標記
	//SetModifiedFlag(TRUE);

	// 更新視圖
	UpdateAllViews(NULL);
	
	// 恢復光標
	EndWaitCursor();
}

void CDipDoc::OnPointLiner() 
{
	// 創建對話框
	CDlgLinerPara dlgPara;
	
	// 線性變換的斜率
	float fa;	
	// 線性變換的截距
	float fb;

	// 初始化變量值
	dlgPara.m_fA = 1.0;
	dlgPara.m_fB = 0.0;
	
	// 顯示對話框,提示用戶設定平移量
	if (dlgPara.DoModal() != IDOK)
	{
		// 返回
		return;
	}
	
	// 獲取用戶設定的平移量
	fa = dlgPara.m_fA;
	fb = dlgPara.m_fB;

	// 刪除對話框
	delete dlgPara;	
	
	//創建點處理CPointPro類對象
	CPointPro PointOperation( m_pDibObject );
	
	// 更改光標形狀
	BeginWaitCursor();
	// 調用LinerTrans()函數進行線性變換
	PointOperation.LinerTran(fa, fb);

	// 設置臟標記
	//SetModifiedFlag(TRUE);

	// 更新視圖
	UpdateAllViews(NULL);
	
	// 恢復光標
	EndWaitCursor();	
}

void CDipDoc::OnPointStre() 
{
	// 創建對話框
	CDlgPointStre dlgPara;
	
	// 點1坐標
	BYTE	bX1;
	BYTE	bY1;
	
	// 點2坐標
	BYTE	bX2;
	BYTE	bY2;

	// 初始化變量值
	dlgPara.m_bX1 = 50;
	dlgPara.m_bY1 = 30;
	dlgPara.m_bX2 = 200;
	dlgPara.m_bY2 = 220;
	
	// 顯示對話框,提示用戶設定拉伸位置
	if (dlgPara.DoModal() != IDOK)
	{
		// 返回
		return;
	}
	
	// 獲取用戶的設定
	bX1 = dlgPara.m_bX1;
	bY1 = dlgPara.m_bY1;
	bX2 = dlgPara.m_bX2;
	bY2 = dlgPara.m_bY2;
	
	// 刪除對話框
	delete dlgPara;	
	
	//創建點處理CPointPro類對象
	CPointPro PointOperation( m_pDibObject );
	
	// 更改光標形狀
	BeginWaitCursor();
	// 調用LinerTrans()函數進行線性變換
	PointOperation.GrayStretch(bX1, bY1, bX2, bY2);

	// 設置臟標記
	//SetModifiedFlag(TRUE);

	// 更新視圖
	UpdateAllViews(NULL);
	
	// 恢復光標
	EndWaitCursor();
}

void CDipDoc::OnPointContauto() 
{
	//判斷當前是否有圖像對象
	if( m_pDibObject == NULL ) return;
	
	//在點處理CPointPro類中創建用來繪制直方圖的數據
	CPointPro PointOperation( m_pDibObject );

	int *pHistogram = PointOperation.GetHistogram();
	
	int i = 0;
	int nGrayMax = 0, nGrayMin = 0;

	//查找最小灰度值
	while(nGrayMin == 0 && i <= 255)
	{
		if( pHistogram[i] >= 100 )
		{
			nGrayMin = i;
		}
		i++;
	}

	//查找最大灰度值
	i = 255;
	while(nGrayMax == 0 && i >= 0)
	{
		if( pHistogram[i] >= 100 )
		{
			nGrayMax = i;
		}
		i--;
	}

	delete [] pHistogram;

	// 更改光標形狀
	BeginWaitCursor();
	// 調用LinerTrans()函數進行線性變換
	PointOperation.GrayStretch(nGrayMin,0,nGrayMax,255);

	// 設置臟標記
	//SetModifiedFlag(TRUE);

	// 更新視圖
	UpdateAllViews(NULL);
	
	// 恢復光標
	EndWaitCursor();
}

void CDipDoc::OnPointThre() 
{
	//判斷當前是否有圖像對象
	if( m_pDibObject == NULL ) return;
	
	//在點處理CPointPro類中創建用來繪制直方圖的數據
	CPointPro PointOperation( m_pDibObject );

	int *pHistogram = PointOperation.GetHistogram();
	
	//生成一個對話框CHistDlg類的實例
	CDlgThreshold ThreshDlg;

	//將繪制直方圖的數據傳遞給CHistDlg對話框類的公有成員變量m_pnHistogram
	if( pHistogram != NULL )
	{
		ThreshDlg.m_pnHistogram = pHistogram;
		//設置當前像素值為0的像素數
		//HistDlg.m_nCurrentPiexsNum = pHistogram[0];

	}
	
	// 更改光標形狀
	BeginWaitCursor();

	ThreshDlg.m_nThresholdAutoAdjust = PointOperation.FindThresh_Discriminant();

	ThreshDlg.m_nThresholdDiscriminant = PointOperation.FindThresh_Auto();

	ThreshDlg.m_nCurrentThreshold = ThreshDlg.m_nThresholdAutoAdjust;
	
	//顯示對話框
	if ( ThreshDlg.DoModal() != IDOK)
		return;

	delete [] pHistogram;

	

	// 調用Threshold()函數進行閾值化操作
	PointOperation.Threshold(ThreshDlg.m_nCurrentThreshold, 
		ThreshDlg.m_nThresholdType, TRUE);

	m_bBinary = TRUE;

	// 設置臟標記
	//SetModifiedFlag(TRUE);

	// 更新視圖
	UpdateAllViews(NULL);
	
	// 恢復光標
	EndWaitCursor();
}

void CDipDoc::OnPointInvert() 
{
	//創建點處理CPointPro類對象
	CPointPro PointOperation( m_pDibObject );
	
	BeginWaitCursor();
	//反色:fa=-1.0,fb=255
	PointOperation.LinerTran(-1.0, 255);
	EndWaitCursor();

	//SetModifiedFlag(TRUE);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人免费的视频| 亚洲综合区在线| 国产自产v一区二区三区c| 91精品午夜视频| 蜜臀av一区二区| 2017欧美狠狠色| 国产91精品在线观看| 中文字幕永久在线不卡| 色婷婷综合久久久中文一区二区| 亚洲男女一区二区三区| 欧美日韩二区三区| 青草av.久久免费一区| 久久日韩粉嫩一区二区三区| 国产91精品一区二区麻豆亚洲| 国产精品不卡在线观看| 欧美色图在线观看| 久99久精品视频免费观看| 欧美激情综合在线| 在线国产电影不卡| 久久国产精品免费| 中文子幕无线码一区tr| 色婷婷久久一区二区三区麻豆| 日韩 欧美一区二区三区| 久久这里只有精品6| 欧美综合视频在线观看| 婷婷中文字幕一区三区| 日韩片之四级片| 成人av在线网站| 五月婷婷激情综合网| 久久午夜国产精品| 欧美午夜精品免费| 国产黑丝在线一区二区三区| 亚洲资源在线观看| 久久老女人爱爱| 在线一区二区视频| 国产盗摄视频一区二区三区| 亚洲综合色成人| 久久精品免视看| 3d成人h动漫网站入口| 成人免费高清视频| 美女视频黄a大片欧美| 亚洲日本丝袜连裤袜办公室| 日韩欧美一区二区视频| 91丨九色丨蝌蚪富婆spa| 久久99精品国产麻豆婷婷| 亚洲激情图片qvod| 中文字幕精品一区二区精品绿巨人| 欧美午夜一区二区三区| 波多野结衣91| 久久91精品久久久久久秒播| 亚洲男女一区二区三区| 国产视频一区在线观看| 欧美一区二区在线不卡| 色av成人天堂桃色av| 国产精品99久久久久久久女警 | 欧美一区二区三区喷汁尤物| 99久久免费精品高清特色大片| 久久不见久久见免费视频1| 亚洲欧美二区三区| 中文字幕+乱码+中文字幕一区| 精品少妇一区二区三区免费观看| 欧美色老头old∨ideo| 97久久精品人人做人人爽| 国产精华液一区二区三区| 蜜臀av亚洲一区中文字幕| 亚洲高清视频的网址| 亚洲免费观看高清完整| 中文字幕av不卡| 日本一区二区三区四区| 精品电影一区二区| 精品国产一区二区三区不卡| 欧美一区二区免费观在线| 欧美日韩国产高清一区二区三区 | 美女网站在线免费欧美精品| 亚洲丰满少妇videoshd| 一区二区三区四区在线| 亚洲私人黄色宅男| 亚洲色图欧美在线| 中文字幕亚洲区| 国产精品国产三级国产普通话三级| 久久久久久久综合色一本| 久久青草国产手机看片福利盒子| 日韩精品一区二区在线| 日韩欧美你懂的| 欧美电影精品一区二区| 欧美xxx久久| 精品粉嫩aⅴ一区二区三区四区| 日韩欧美激情在线| 精品国产网站在线观看| 26uuu久久综合| 欧美国产精品中文字幕| 亚洲婷婷在线视频| 亚洲精品国产无天堂网2021| 亚洲国产精品天堂| 美日韩黄色大片| 国产精品亚洲成人| 99re在线视频这里只有精品| 日本精品免费观看高清观看| 欧美日韩免费在线视频| 欧美丰满少妇xxxxx高潮对白| 日韩精品一区二区三区在线播放 | 亚洲精品国产第一综合99久久| 亚洲精品国产品国语在线app| 亚洲大片一区二区三区| 蜜臀av一区二区| 国产剧情一区二区| 91片黄在线观看| 欧美日韩成人一区二区| 26uuu色噜噜精品一区| 中文字幕一区二区三区精华液| 亚洲一区二区三区中文字幕| 免费在线欧美视频| 成人性视频网站| 欧美在线影院一区二区| 精品欧美乱码久久久久久1区2区| 国产精品素人一区二区| 亚洲一级电影视频| 激情六月婷婷综合| 一道本成人在线| 精品国产免费一区二区三区四区 | 亚洲精品国产一区二区三区四区在线| 亚洲国产精品久久不卡毛片 | 久久色.com| 亚洲精品午夜久久久| 蜜臀久久99精品久久久久久9| 国产激情一区二区三区四区| 欧美亚洲精品一区| 国产三级久久久| 午夜视频一区在线观看| 丁香网亚洲国际| 91麻豆精品91久久久久久清纯| 欧美激情一区二区在线| 日韩 欧美一区二区三区| 成人v精品蜜桃久久一区| 欧美福利视频一区| 亚洲欧美电影院| 国产美女在线观看一区| 欧美精品第1页| 综合精品久久久| 精品一区二区影视| 欧美精品久久天天躁| 亚洲少妇屁股交4| 国产精品一区二区黑丝| 91精品国产一区二区人妖| 亚洲精品自拍动漫在线| 国产成人综合在线| 日韩精品一区在线| 日韩精品欧美成人高清一区二区| 99re66热这里只有精品3直播 | 久久品道一品道久久精品| 日韩影院精彩在线| 日本高清成人免费播放| 国产欧美精品日韩区二区麻豆天美| 日韩激情视频在线观看| 欧美少妇bbb| 一区二区三区四区在线免费观看 | 久久黄色级2电影| 欧美色图一区二区三区| 亚洲乱码国产乱码精品精的特点| 成人禁用看黄a在线| 国产日产欧美精品一区二区三区| 老汉av免费一区二区三区| 欧美老肥妇做.爰bbww| 一区av在线播放| 91蜜桃婷婷狠狠久久综合9色| 国产欧美一区二区精品仙草咪| 精品亚洲成av人在线观看| 日韩视频在线一区二区| 蜜臀av性久久久久蜜臀aⅴ | 欧美大片一区二区| 日本一不卡视频| 日韩一级片网址| 免费亚洲电影在线| 日韩欧美精品在线| 久久精品国产免费看久久精品| 3atv一区二区三区| 蜜桃在线一区二区三区| 精品国产一区二区三区久久久蜜月| 美女脱光内衣内裤视频久久网站| 欧美一区二区在线免费观看| 久久精品久久久精品美女| 欧美成人女星排名| 国产曰批免费观看久久久| 欧美韩日一区二区三区| 91亚洲精品一区二区乱码| 亚洲欧美日本在线| 欧美影院午夜播放| 香蕉av福利精品导航| 欧美一区二区三区在线观看 | 国产伦精品一区二区三区视频青涩| 精品理论电影在线观看| 国产成人精品三级| 中文字幕亚洲欧美在线不卡| 色婷婷久久一区二区三区麻豆| 香蕉乱码成人久久天堂爱免费| 91精品国产乱| 国产成人丝袜美腿| 亚洲激情一二三区| 欧美一级二级在线观看| 国产福利视频一区二区三区|