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

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

?? dlgreg.cpp

?? VC++數字圖象獲取,處理
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
// DlgReg.cpp : implementation file
//

#include "stdafx.h"
#include "ImageProcessing.h"
#include "ImageProcessingDoc.h"
#include "GlobalApi.h"
#include "DlgReg.h"
#include "DlgAftReg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CDlgReg dialog


CDlgReg::CDlgReg(CWnd* pParent /*=NULL*/, CImageProcessingDoc* pDoc)
	: CDialog(CDlgReg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDlgReg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// 獲取文檔類指針
	m_pDoc = pDoc;

	// 設置計算圖象位置標志位位FALSE
	m_bCalImgLoc = FALSE;

	// 設置基準圖象為原始打開的圖象
	m_pDibInit = pDoc->m_pDibInit;

	// 設置待配準圖象
	m_pDibSamp = new CDib;

	// 設置選取特征點的數目初始值
	m_nChsFeatureNum = 0;

	// 設置選取特征點的標志位為FALSE
	m_bChoseFeature = FALSE;
}


void CDlgReg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlgReg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDlgReg, CDialog)
	//{{AFX_MSG_MAP(CDlgReg)
	ON_WM_PAINT()
	ON_BN_CLICKED(IDC_REG_OPEN, OnRegOpen)
	ON_BN_CLICKED(IDC_REG_REG, OnRegReg)
	ON_BN_CLICKED(IDC_REG_CHOSE_FEATURE, OnRegChoseFeature)
	ON_WM_LBUTTONUP()
	ON_WM_MOUSEMOVE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgReg message handlers

void CDlgReg::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	
	// 如果還沒有計算圖象的位置,則進行計算
	if(!m_bCalImgLoc){
		CalImageLocation();
	}

	CSize sizeDisplay;
	CPoint pointDisplay;
	
	// 顯示基準圖象
	if(!m_pDibInit->IsEmpty()){
		sizeDisplay.cx=m_pDibInit->m_lpBMIH->biWidth;
		sizeDisplay.cy=m_pDibInit->m_lpBMIH->biHeight;
		pointDisplay.x = m_rectInitImage.left;
		pointDisplay.y = m_rectInitImage.top;
		m_pDibInit->Draw(&dc,pointDisplay,sizeDisplay);		
	}
	
	// 顯示待配準圖象
	if(!m_pDibSamp->IsEmpty()){
		sizeDisplay.cx=m_pDibSamp->m_lpBMIH->biWidth;
		sizeDisplay.cy=m_pDibSamp->m_lpBMIH->biHeight;
		pointDisplay.x = m_rectResltImage.left;
		pointDisplay.y = m_rectResltImage.top;
		m_pDibSamp->Draw(&dc,pointDisplay,sizeDisplay);		
	}

	// 顯示特征點與配準的特征點
	DrawFeature(&dc);	
}

/*************************************************************************
 *
 * \函數名稱:
 *   CalImageLocation()
 *
 * \輸入參數:
 *   無
 *
 * \返回值:
 *   無
 *
 * \說明:
 *   該函數設置對話框中的控件位置和大小,并設置顯示圖象的位置。默認的圖象大小為352×288,如果圖象小于
 *此大小,則控件大小設置為352×288,并將圖象放置在控件中間。
 *
 *************************************************************************
 */
void CDlgReg::CalImageLocation()
{
	// 獲得控件IDC_REG_INIT_IMAGE的句柄,并獲得控件的初始位置信息
	CWnd* pWnd=GetDlgItem(IDC_REG_INIT_IMAGE);
	WINDOWPLACEMENT *winPlacement;
	winPlacement=new WINDOWPLACEMENT;
	pWnd->GetWindowPlacement(winPlacement);
	
	// 圖象寬度
	int nImageWidth;
	nImageWidth = m_pDibInit->m_lpBMIH->biWidth;

	// 圖象高度
	int nImageHeight;
	nImageHeight = m_pDibInit->m_lpBMIH->biHeight;

	
	// 調整控件IDC_REG_INIT_IMAGE的大小位置,并同時設置顯示基準圖象的位置
	if(nImageHeight > 352){
		winPlacement->rcNormalPosition.bottom = winPlacement->rcNormalPosition.top + nImageHeight;	
		m_rectInitImage.bottom = winPlacement->rcNormalPosition.bottom;
		m_rectInitImage.top    = winPlacement->rcNormalPosition.top;		
	}
	else{
		winPlacement->rcNormalPosition.bottom = winPlacement->rcNormalPosition.top + 352;
		m_rectInitImage.bottom = winPlacement->rcNormalPosition.top + 176 + nImageHeight/2;
		m_rectInitImage.top    = winPlacement->rcNormalPosition.top + 176 - nImageHeight/2;
	}
	if(nImageWidth > 288){
		winPlacement->rcNormalPosition.right = winPlacement->rcNormalPosition.left + nImageWidth;
		m_rectInitImage.right = winPlacement->rcNormalPosition.right;
		m_rectInitImage.left  = winPlacement->rcNormalPosition.left;			
	}
	else{
		winPlacement->rcNormalPosition.right = winPlacement->rcNormalPosition.left + 288;
		m_rectInitImage.right = winPlacement->rcNormalPosition.left + 144 + nImageWidth/2;
		m_rectInitImage.left  = winPlacement->rcNormalPosition.left + 144 - nImageWidth/2;
	}

	// 設置IDC_REG_INIT_IMAGE控件的大小位置
	pWnd->SetWindowPlacement(winPlacement);	
			
	// 獲得顯示基準圖象控件的右邊位置,以便確認顯示待配準圖象控件的位置
	int nIniImgRight;
	nIniImgRight = winPlacement->rcNormalPosition.right;
	
	int  nIniImgLeft;
	nIniImgLeft   = winPlacement->rcNormalPosition.left;

	// 獲得IDC_REG_INIT_IMAGE控件的下邊位置,以便調整其他控件的位置
	int nIniImgBottom;
	nIniImgBottom = winPlacement->rcNormalPosition.bottom;

	// 獲得控件IDC_REG_RESLT_IMAGE的句柄,并獲得初始位置信息
	pWnd=GetDlgItem(IDC_REG_RESLT_IMAGE);
	pWnd->GetWindowPlacement(winPlacement);
	
	// 如果還未打開待配準圖象,則設置待配準圖象大小和基準圖象大小相等
	if(!m_pDibSamp->IsEmpty()){
		nImageWidth  = m_pDibSamp->m_lpBMIH->biWidth;
		nImageHeight = m_pDibSamp->m_lpBMIH->biHeight;
	}
	
	// 調整控件IDC_REG_RESLT_IMAGE的大小位置,并同時設置顯示待配準圖象的位置

	// 先調整控件的左邊位置,和IDC_REG_INIT_IMAGE控件相隔15個象素
	winPlacement->rcNormalPosition.left = nIniImgRight + 15;

	if(nImageHeight > 352){		
		winPlacement->rcNormalPosition.bottom = winPlacement->rcNormalPosition.top + nImageHeight;	
		m_rectResltImage.bottom = winPlacement->rcNormalPosition.bottom;
		m_rectResltImage.top    = winPlacement->rcNormalPosition.top;		
	}
	else{
		winPlacement->rcNormalPosition.bottom = winPlacement->rcNormalPosition.top + 352;
		m_rectResltImage.bottom = winPlacement->rcNormalPosition.top + 176 + nImageHeight/2;
		m_rectResltImage.top    = winPlacement->rcNormalPosition.top + 176 - nImageHeight/2;
	}
	if(nImageWidth > 288){
		winPlacement->rcNormalPosition.right = winPlacement->rcNormalPosition.left + nImageWidth;
		m_rectResltImage.right = winPlacement->rcNormalPosition.right;
		m_rectResltImage.left  = winPlacement->rcNormalPosition.left;			
	}
	else{
		winPlacement->rcNormalPosition.right = winPlacement->rcNormalPosition.left + 288;
		m_rectResltImage.right = winPlacement->rcNormalPosition.left + 144 + nImageWidth/2;
		m_rectResltImage.left  = winPlacement->rcNormalPosition.left + 144 - nImageWidth/2;
	}

	// 設置IDC_REG_RESLT_IMAGE控件的大小位置
	pWnd->SetWindowPlacement(winPlacement);
	
	if(nIniImgBottom < winPlacement->rcNormalPosition.bottom)
		nIniImgBottom = winPlacement->rcNormalPosition.bottom;


	nIniImgBottom = winPlacement->rcNormalPosition.bottom;
	
	nIniImgRight  = winPlacement->rcNormalPosition.right;
	
	// 設置控件IDOK的位置大小
	pWnd=GetDlgItem(IDOK);
	pWnd->GetWindowPlacement(winPlacement);
	winPlacement->rcNormalPosition.top = nIniImgBottom +15;
	winPlacement->rcNormalPosition.bottom = nIniImgBottom + 60;
	pWnd->SetWindowPlacement(winPlacement);
	
	// 設置控件IDCANCEL的位置大小
	pWnd=GetDlgItem(IDCANCEL);
	pWnd->GetWindowPlacement(winPlacement);
	winPlacement->rcNormalPosition.top = nIniImgBottom +15;
	winPlacement->rcNormalPosition.bottom = nIniImgBottom + 60;
	pWnd->SetWindowPlacement(winPlacement);

	// 設置控件IDC_REG_OPEN的位置大小
	pWnd=GetDlgItem(IDC_REG_OPEN);
	pWnd->GetWindowPlacement(winPlacement);
	winPlacement->rcNormalPosition.top = nIniImgBottom +15;
	winPlacement->rcNormalPosition.bottom = nIniImgBottom + 60;
	pWnd->SetWindowPlacement(winPlacement);
	
	// 設置控件IDC_REG_REG的位置大小
	pWnd=GetDlgItem(IDC_REG_REG);
	pWnd->GetWindowPlacement(winPlacement);
	winPlacement->rcNormalPosition.top = nIniImgBottom +15;
	winPlacement->rcNormalPosition.bottom = nIniImgBottom + 60;
	pWnd->SetWindowPlacement(winPlacement);
	
	
	// 設置控件IDC_REG_CHOSE_FEATUR的位置大小
	pWnd=GetDlgItem(IDC_REG_CHOSE_FEATURE);
	pWnd->GetWindowPlacement(winPlacement);
	winPlacement->rcNormalPosition.top = nIniImgBottom +15;
	winPlacement->rcNormalPosition.bottom = nIniImgBottom + 60;
	pWnd->SetWindowPlacement(winPlacement);

	// 調整此對話框的大小
	//pWnd = GetDlgItem(IDD_DLG_REG);
	this->GetWindowPlacement(winPlacement);
	//winPlacement->rcNormalPosition.top = nIniImgBottom +15;
	winPlacement->rcNormalPosition.bottom = nIniImgBottom + 300;
	winPlacement->rcNormalPosition.left   = nIniImgLeft   - 20;
	winPlacement->rcNormalPosition.right  = nIniImgRight  + 20;
	this->SetWindowPlacement(winPlacement);

	// 釋放已分配內存
	delete winPlacement;

	// 設置計算圖象控件位置標志位為TRUE
	m_bCalImgLoc = TRUE;
}

/*************************************************************************
 *
 * \函數名稱:
 *   DrawFeature()
 *
 * \輸入參數:
 *   無
 *
 * \返回值:
 *   無
 *
 * \說明:
 *   該函數根據類的成員變量確定特征點的數目和位置,并在圖象中進行顯示。
 *
 *************************************************************************
 */
void CDlgReg::DrawFeature(CDC* pDC)
{
	// 循環變量
	int i;

	// 臨時變量
	CPoint pointTemp;

	// 半徑
	int nRadius;
	nRadius = 5;

	// 設置畫圖類型
	pDC->SelectStockObject(HOLLOW_BRUSH);

	// 聲明畫筆
	CPen penWhite(PS_SOLID,1,RGB(255,255,255));
	CPen *pOldPen;

	// 將畫筆選入,并保存以前的畫筆
	pOldPen = pDC->SelectObject(&penWhite);

	for(i=0; i<m_nChsFeatureNum; i++){
		// 首先顯示特征點
		
		// 確定此點的顯示位置
		pointTemp.x = m_pPointSampl[i].x + m_rectResltImage.left;
		pointTemp.y = m_pPointSampl[i].y + m_rectResltImage.top ;		

		// 畫出此特征點,其中園的半徑為nRadius
		CRect rectSamp(pointTemp.x-nRadius , pointTemp.y-nRadius , 
			pointTemp.x+nRadius , pointTemp.y+nRadius);
		pDC->Ellipse(rectSamp);

		// 再顯示配準特征點
		// 確定此點的顯示位置
		pointTemp.x = m_pPointBase[i].x + m_rectInitImage.left;
		pointTemp.y = m_pPointBase[i].y + m_rectInitImage.top ;		

		// 畫出此特征點,其中園的半徑為nRadius
		CRect rectBase(pointTemp.x-nRadius , pointTemp.y-nRadius , 
			pointTemp.x+nRadius , pointTemp.y+nRadius);
		pDC->Ellipse(rectBase);
	}

	// 回復以前的畫筆
	pDC->SelectObject(pOldPen);
	penWhite.DeleteObject();
}

/*************************************************************************
 *
 * \函數名稱:
 *   OnRegOpen()
 *
 * \輸入參數:
 *   無
 *
 * \返回值:
 *   無
 *
 * \說明:
 *   該函數打開待配準圖象,并將圖象存放在m_pDibSamp中。
 *
 *************************************************************************
 */
void CDlgReg::OnRegOpen() 
{
	// TODO: Add your control notification handler code here
	CFileDialog dlg(TRUE,"bmp","*.bmp");
	if(dlg.DoModal() == IDOK)
	{
 
	 	CFile file;
	 
	 	CString strPathName;
 
		strPathName = dlg.GetPathName();
 
		// 打開文件
		if( !file.Open(strPathName, CFile::modeRead | CFile::shareDenyWrite))
		{
			// 返回	
			return ;
		}

		// 讀入模板圖象
		if(!m_pDibSamp->Read(&file)){
			// 恢復光標形狀
			EndWaitCursor();

			// 清空已分配內存
			m_pDibSamp->Empty();

			// 返回
 			return;
		}
	}
	
	// 判斷是否是8-bpp位圖(這里為了方便,只處理8-bpp位圖的模板配準,其它的可以類推)
	if(m_pDibSamp->m_nColorTableEntries != 256)
	{
		// 提示用戶
		MessageBox("目前只支持256色位圖!", "系統提示" , MB_ICONINFORMATION | MB_OK);

		// 清空已分配內存
		m_pDibSamp->Empty();

		// 返回
		return;
	}

	// 如果打開新的待配準文件,將圖象位置設置標志位設為FALSE,以便再次調整位置
	m_bCalImgLoc = FALSE;

	// 更新顯示
	this->UpdateData();
	this->Invalidate();
}



/*************************************************************************
 *
 * \函數名稱:
 *   OnRegChoseFeatureOnRegReg()
 *
 * \輸入參數:
 *   無
 *
 * \返回值:
 *   無
 *
 * \說明:
 *   該函數設置選取特征點標志位,然后調用函數在待配準圖象中選取特征點,并
 *配準這些特征點。特征點的數目至少應該選取三個。
 *
 *************************************************************************
 */
void CDlgReg::OnRegChoseFeature() 
{
	// 如果待配準圖象尚未打開,則不能進行特征點選取工作
	if((m_pDibSamp->IsEmpty())){
		AfxMessageBox("尚未打開待配準圖象文件,請打開待配準圖象");
		return;
	}
	// 設置選取特征點標志位
	m_bChoseFeature = TRUE;	
	
	AfxMessageBox("請在待配準圖象中選取特征點");
}

/*************************************************************************
 *
 * \函數名稱:
 *   OnLButtonUp()
 *
 * \輸入參數:
 *   無
 *
 * \返回值:
 *   無
 *
 * \說明:
 *   該函數根據鼠標所標定的位置設置特征點。然后調用特征配準函數配準此特征點。
 *特征點的數目至少應該選取三個。
 *
 *************************************************************************
 */
void CDlgReg::OnLButtonUp(UINT nFlags, CPoint point) 
{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美电影免费观看高清完整版在| 日韩和欧美一区二区三区| 成人网男人的天堂| 国产精品久久午夜夜伦鲁鲁| aaa国产一区| 亚洲综合免费观看高清完整版在线| 欧美又粗又大又爽| 视频一区中文字幕| 欧美电影精品一区二区| 国产999精品久久久久久绿帽| 国产精品久久福利| 欧美三级电影精品| 免费在线欧美视频| 久久亚洲欧美国产精品乐播| av亚洲精华国产精华精华| 亚洲精品久久嫩草网站秘色| 欧美日韩一卡二卡| 久99久精品视频免费观看| 欧美国产欧美综合| 在线观看亚洲成人| 在线亚洲精品福利网址导航| 欧美大片拔萝卜| 成人三级在线视频| 亚洲主播在线播放| 欧美成人性福生活免费看| 丰满岳乱妇一区二区三区| 洋洋av久久久久久久一区| 欧美肥妇毛茸茸| 国产激情视频一区二区三区欧美| 亚洲日本在线观看| 日韩一级完整毛片| 成人毛片视频在线观看| 一级做a爱片久久| 精品国产亚洲一区二区三区在线观看| 成人动漫中文字幕| 三级欧美韩日大片在线看| 国产午夜亚洲精品午夜鲁丝片| 91久久精品一区二区三| 极品尤物av久久免费看| 亚洲色图视频网| 日韩免费福利电影在线观看| av电影一区二区| 美美哒免费高清在线观看视频一区二区| 国产亚洲自拍一区| 欧美男女性生活在线直播观看| 国产成人在线观看免费网站| 亚洲一区二区三区四区在线观看 | 精品理论电影在线观看| 97成人超碰视| 激情文学综合网| 亚洲一区二区高清| 久久天天做天天爱综合色| 91久久精品日日躁夜夜躁欧美| 精品一区二区在线播放| 曰韩精品一区二区| 久久婷婷一区二区三区| 欧美另类变人与禽xxxxx| 精品国产乱码久久久久久老虎 | 欧美一级一区二区| 91免费小视频| 六月丁香综合在线视频| 亚洲资源中文字幕| 国产精品免费av| 精品久久一区二区三区| 欧美日韩中文一区| 99国产精品一区| 国产乱码精品一区二区三区av | 国产亚洲精品中文字幕| 欧美日韩久久久| 成人动漫一区二区在线| 精品一区精品二区高清| 亚洲国产成人av网| 1024成人网色www| 久久精品网站免费观看| 日韩欧美亚洲一区二区| 欧美日韩亚洲国产综合| 99久久婷婷国产综合精品电影| 国内一区二区视频| 日本欧美韩国一区三区| 亚洲综合999| 国产精品国产馆在线真实露脸| 欧美精品一区二区三区一线天视频 | 亚洲国产aⅴ成人精品无吗| 国产精品美女视频| 久久久午夜精品| 精品国产亚洲一区二区三区在线观看| 欧美男女性生活在线直播观看| 国产精品美女久久久久久久久久久| 91在线小视频| 丁香另类激情小说| 国内精品第一页| 麻豆中文一区二区| 五月婷婷色综合| 亚洲国产精品久久久久秋霞影院 | 国产精品久久一级| 国产午夜精品一区二区| 精品国产一区二区三区忘忧草| 在线综合视频播放| 欧美性猛交xxxx黑人交| 色域天天综合网| 91在线国产观看| av亚洲产国偷v产偷v自拍| 国产精品1024| 国产福利一区二区三区视频在线| 国产最新精品免费| 狠狠色丁香久久婷婷综合_中| 久久se精品一区精品二区| 日本 国产 欧美色综合| 免费在线观看日韩欧美| 蜜桃久久精品一区二区| 男女性色大片免费观看一区二区| 蜜桃av噜噜一区| 美国一区二区三区在线播放| 美日韩一区二区三区| 精品综合免费视频观看| 国产一区二区三区综合| 国产黑丝在线一区二区三区| 国产 日韩 欧美大片| 成熟亚洲日本毛茸茸凸凹| jlzzjlzz欧美大全| 色综合 综合色| 欧美视频一区二区三区在线观看| 欧美日韩一区二区三区视频| 欧美一卡2卡三卡4卡5免费| 亚洲国产精品嫩草影院| 欧美一区二区三区免费| 欧美mv和日韩mv国产网站| 久久免费偷拍视频| 欧美国产一区在线| 亚洲免费观看在线观看| 亚洲国产精品久久艾草纯爱| 日本vs亚洲vs韩国一区三区| 国产一区欧美二区| 成人教育av在线| 91在线观看地址| 欧美三区在线观看| 日韩免费一区二区| 国产日韩欧美高清| 亚洲免费av高清| 午夜精品久久久久影视| 精品中文字幕一区二区| a美女胸又www黄视频久久| 在线观看区一区二| 日韩欧美在线123| 国产欧美一区视频| 亚洲r级在线视频| 麻豆国产一区二区| 国产mv日韩mv欧美| 欧美中文字幕一区二区三区亚洲| 欧美一区二区三区四区久久| 久久久久久影视| 亚洲精品写真福利| 免费在线观看一区二区三区| 成人免费高清在线| 欧美日韩精品一区二区| 久久综合999| 亚洲精品成人悠悠色影视| 免费看日韩a级影片| 国产成人午夜精品5599| 在线免费精品视频| 精品人在线二区三区| 日韩美女久久久| 日本美女一区二区三区| 成人免费高清在线| 91精品欧美久久久久久动漫| 久久精品水蜜桃av综合天堂| 亚洲国产精品综合小说图片区| 国模娜娜一区二区三区| 亚洲精品日韩一| 国产亚洲美州欧州综合国 | 国产丝袜美腿一区二区三区| 国产清纯美女被跳蛋高潮一区二区久久w | 美国欧美日韩国产在线播放| 成人高清视频在线| 欧美一级精品大片| 亚洲女同女同女同女同女同69| 美腿丝袜亚洲三区| 在线观看中文字幕不卡| 久久精品亚洲乱码伦伦中文| 丝瓜av网站精品一区二区| 不卡的电视剧免费网站有什么| 欧美一级一区二区| 一区二区三区在线播放| 久久成人免费电影| 欧美性一二三区| 中文字幕第一区综合| 男女性色大片免费观看一区二区 | 久久蜜臀中文字幕| 香蕉成人伊视频在线观看| 成人精品国产免费网站| 日韩精品一区二区三区视频在线观看| 亚洲丝袜精品丝袜在线| 国产一区二区h| 91精品国产综合久久福利| 亚洲欧美日韩国产综合在线| 国产一级精品在线| 欧美一区二区网站| 艳妇臀荡乳欲伦亚洲一区| 波多野结衣亚洲| 久久免费午夜影院|