亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
国产馆精品极品| 成人久久久精品乱码一区二区三区| 欧美精品第一页| 亚洲成人资源网| 91精品国产综合久久小美女| 免费久久99精品国产| 久久中文娱乐网| 国产成人激情av| 亚洲男帅同性gay1069| 欧美怡红院视频| 日韩电影在线免费| 久久婷婷国产综合精品青草| 成人永久aaa| 一区二区三区精品在线| 91精品免费观看| 国产成人夜色高潮福利影视| 一区在线播放视频| 欧美日韩成人综合| 国产精品99久久久| 专区另类欧美日韩| 欧美福利视频一区| 国产精品自产自拍| 亚洲精品高清视频在线观看| 欧美日本韩国一区二区三区视频 | 一区二区在线观看视频在线观看| 在线观看免费亚洲| 激情文学综合丁香| 最新国产の精品合集bt伙计| 欧美日韩三级视频| 国产乱色国产精品免费视频| 亚洲欧美日韩一区二区 | 一区二区三区四区激情 | 成人精品一区二区三区四区| 国产乱码精品一区二区三区五月婷| 国产精品素人一区二区| 欧美综合亚洲图片综合区| 人人狠狠综合久久亚洲| 国产精品国产馆在线真实露脸| 欧美亚洲一区二区在线| 久久国产精品72免费观看| 国产精品成人一区二区艾草| 欧美一区日韩一区| 99久久精品一区二区| 日韩国产精品久久久| 国产精品三级电影| 91精品欧美综合在线观看最新| 国产.欧美.日韩| 天天综合天天做天天综合| 国产日韩一级二级三级| 欧美日韩久久久久久| 粉嫩在线一区二区三区视频| 亚洲动漫第一页| 中文字幕免费不卡| 日韩一区二区在线观看| 91视频一区二区三区| 韩国精品久久久| 亚瑟在线精品视频| 国产精品视频一二| 日韩欧美一级在线播放| 91久久精品一区二区二区| 国产美女主播视频一区| 亚洲成精国产精品女| 国产精品久久看| 26uuuu精品一区二区| 欧美色大人视频| caoporn国产精品| 国产原创一区二区| 婷婷中文字幕综合| 亚洲三级电影网站| 久久精品夜色噜噜亚洲a∨| 欧美日本高清视频在线观看| 色婷婷综合久久| 懂色av一区二区三区蜜臀| 免费观看一级欧美片| 亚洲午夜日本在线观看| 国产精品第一页第二页第三页| 欧美大尺度电影在线| 欧美人与z0zoxxxx视频| 色综合视频在线观看| 成人免费毛片片v| 国产精品一二三| 另类欧美日韩国产在线| 五月综合激情日本mⅴ| 一区二区视频在线看| 国产精品美女久久久久aⅴ国产馆| 日韩欧美国产一区二区在线播放| 欧美三级中文字幕| 在线视频综合导航| 一本色道**综合亚洲精品蜜桃冫| 国产91精品久久久久久久网曝门 | 国产成人aaa| 国产一区欧美二区| 激情久久五月天| 免费人成精品欧美精品| 日韩成人一区二区| 午夜伦理一区二区| 亚洲国产成人精品视频| 夜夜嗨av一区二区三区网页 | 欧美日韩不卡在线| 在线观看日韩av先锋影音电影院| 色婷婷综合在线| 日本伦理一区二区| 在线观看视频一区二区欧美日韩| 99在线精品免费| 久久婷婷国产综合精品青草| 美女在线观看视频一区二区| 日韩天堂在线观看| 成人看片黄a免费看在线| 成人在线综合网| 成人午夜在线视频| 成人av免费在线观看| 成人动漫在线一区| 成人激情午夜影院| 99久久久国产精品免费蜜臀| 99久久精品免费精品国产| 91亚洲大成网污www| 国产欧美一区二区精品性色超碰| 26uuu成人网一区二区三区| 久久久久久一二三区| 国产欧美日本一区视频| 中文字幕第一区二区| 1024成人网| 一区二区三区欧美| 亚洲成人av资源| 久久精品国产免费| 国产激情91久久精品导航| 成人午夜免费视频| 91蜜桃网址入口| 在线观看成人免费视频| 欧美人xxxx| 日韩一级高清毛片| 久久综合九色综合欧美就去吻| 国产视频一区二区三区在线观看| 中文av字幕一区| 亚洲一区av在线| 香蕉加勒比综合久久| 麻豆精品久久精品色综合| 国产乱子伦一区二区三区国色天香| 成人综合婷婷国产精品久久 | 国产福利一区二区三区视频在线 | 国产福利一区二区三区| 国产欧美一区视频| 成人免费视频视频| 亚洲sss视频在线视频| 一区二区三区四区在线| 亚洲欧洲av一区二区三区久久| 亚洲日本在线a| 视频一区在线播放| 国产精品538一区二区在线| 99久久精品国产精品久久| 欧美视频在线一区二区三区| 日韩亚洲欧美综合| 国产精品入口麻豆九色| 亚洲综合在线免费观看| 六月婷婷色综合| 91在线视频18| 9191久久久久久久久久久| 久久综合成人精品亚洲另类欧美| 亚洲人123区| 美女看a上一区| 不卡的看片网站| 欧美精品v国产精品v日韩精品| 久久久久久久电影| 亚洲成人激情综合网| 国产精品一区二区男女羞羞无遮挡| 色呦呦一区二区三区| 日韩免费成人网| 日韩一区中文字幕| 蜜臀久久99精品久久久久宅男 | 国产成人精品一区二区三区网站观看 | 久久精品久久久精品美女| 不卡的av网站| 欧美一级淫片007| ●精品国产综合乱码久久久久| 日韩精品亚洲专区| 97se亚洲国产综合自在线 | 国产精品嫩草久久久久| 日韩av网站免费在线| 日韩欧美区一区二| 亚洲欧美日韩精品久久久久| 国产精品国产成人国产三级| 亚洲午夜激情网站| 国产精品久久久久久久久晋中| 亚洲老妇xxxxxx| 国产露脸91国语对白| 91在线观看地址| 色婷婷综合视频在线观看| 亚洲精品一区二区三区在线观看| 亚洲品质自拍视频网站| 奇米色一区二区| 91久久线看在观草草青青| 久久久不卡影院| 日本系列欧美系列| 色综合中文字幕国产 | 蜜乳av一区二区三区| av福利精品导航| 精品国产一区二区亚洲人成毛片| 亚洲女同一区二区| 粉嫩久久99精品久久久久久夜| 91精品国产色综合久久ai换脸|