⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 seqprocessdlgplay.cpp

📁 在人脸检测的基础之上,对嘴部的运动表情进行分析,进行语音模拟.
💻 CPP
字号:
// SeqProcessDlgPlay.cpp : implementation file
//

#include "stdafx.h"
#include "SeqProcess.h"
#include "SeqProcessDlg.h"
#include "FnMath.h"
#include "matrix.h"

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

#define FRAMERATE 25

// Create a math functions object
static FnMath fMath;

////////////////////////////////////////////////////////////////////////////////

void CSeqProcessDlg::InitializePlay()
{
	DisablePlayDlgItems();

	DisablePlayButtons();

	isEditCurrentFrameNumber = FALSE;
	isEditFromFrameNumber = FALSE;
	isEditToFrameNumber = FALSE;

	m_direction = 1; // 1 => forward play; -1 => backward play
	m_check_frame = FALSE;

}
//--------------------------------------------------------------------------------
void CSeqProcessDlg::EnablePlayDlgItems()
{
	GetDlgItem(IDC_EDIT_CURRENTFRAME)->EnableWindow(TRUE);
	GetDlgItem(IDC_EDIT_FROMFRAME)->EnableWindow(TRUE);
	GetDlgItem(IDC_EDIT_TOFRAME)->EnableWindow(TRUE);
	GetDlgItem(IDC_SLIDER_FRAMENUM)->EnableWindow(TRUE);
	GetDlgItem(IDC_CHECK_FRAME_MODE)->EnableWindow(TRUE);
}
//--------------------------------------------------------------------------------

void CSeqProcessDlg::EnablePlayButtons()
{
	GetDlgItem(IDC_BUTTON_FORWARD)->EnableWindow(TRUE);
	GetDlgItem(IDC_BUTTON_BACKWARD)->EnableWindow(TRUE);
	GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(TRUE);
	GetDlgItem(IDC_BUTTON_HOME)->EnableWindow(TRUE);
	GetDlgItem(IDC_BUTTON_END)->EnableWindow(TRUE);

}
//--------------------------------------------------------------------------------

void CSeqProcessDlg::DisablePlayDlgItems()
{
	GetDlgItem(IDC_EDIT_CURRENTFRAME)->EnableWindow(FALSE);
	GetDlgItem(IDC_EDIT_FROMFRAME)->EnableWindow(FALSE);
	GetDlgItem(IDC_EDIT_TOFRAME)->EnableWindow(FALSE);
	GetDlgItem(IDC_SLIDER_FRAMENUM)->EnableWindow(FALSE);
	GetDlgItem(IDC_CHECK_FRAME_MODE)->EnableWindow(FALSE);
	UpdateData(FALSE);
}
//--------------------------------------------------------------------------------

void CSeqProcessDlg::DisablePlayButtons()
{
	GetDlgItem(IDC_BUTTON_FORWARD)->EnableWindow(FALSE);
	GetDlgItem(IDC_BUTTON_BACKWARD)->EnableWindow(FALSE);
	GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(FALSE);
	GetDlgItem(IDC_BUTTON_HOME)->EnableWindow(FALSE);
	GetDlgItem(IDC_BUTTON_END)->EnableWindow(FALSE);

}
//--------------------------------------------------------------------------------

void CSeqProcessDlg::OnPlayStart() 
{

	DisablePlayButtons();
	GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(TRUE);

	UINT milliSec;
	milliSec = (int) (0.5 + 1000.0/FRAMERATE);
	SetTimer(1, milliSec, NULL);
	
}
//--------------------------------------------------------------------------------

void CSeqProcessDlg::OnPlayStop() 
{
	KillTimer(1);

	EnablePlayButtons();
	GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(FALSE);

}
//--------------------------------------------------------------------------------

void CSeqProcessDlg::OnPlayNext() 
{
	int MinFrame = m_fromframe - dlgLoadSequence.m_from;
	int MaxFrame = m_toframe - dlgLoadSequence.m_from;
	currentFrame++;
	if( currentFrame > MaxFrame)
	{
		currentFrame = MinFrame;
	}
	DrawCurrentImage();

	// Update the slider display
	m_currentframe = currentFrame + dlgLoadSequence.m_from;
	m_sliderframe.SetPos(m_currentframe);
	UpdateData(FALSE);
}
//--------------------------------------------------------------------------------

void CSeqProcessDlg::OnPlayPrev() 
{
	int MinFrame = m_fromframe - dlgLoadSequence.m_from;
	int MaxFrame = m_toframe - dlgLoadSequence.m_from;
	currentFrame--;
	if( currentFrame < MinFrame)
	{
		currentFrame = MaxFrame;
	}
	DrawCurrentImage();

	// Update the slider display
	m_currentframe = currentFrame + dlgLoadSequence.m_from;
	m_sliderframe.SetPos(m_currentframe);
	UpdateData(FALSE);
}
//--------------------------------------------------------------------------------

void CSeqProcessDlg::OnTimer(UINT nIDEvent) 
{

	int MinFrame = m_fromframe - dlgLoadSequence.m_from;
	int MaxFrame = m_toframe - dlgLoadSequence.m_from;

	currentFrame += m_direction;

	if( currentFrame > MaxFrame)
	{
		currentFrame = MinFrame;
	}
	else if( currentFrame < MinFrame)
	{
		currentFrame = MaxFrame;
	}
	
	DrawCurrentImage();

	// Update the slider display
	m_currentframe = currentFrame + dlgLoadSequence.m_from;
	m_sliderframe.SetPos(m_currentframe);
	UpdateData(FALSE);
	
	CDialog::OnTimer(nIDEvent);
}

//--------------------------------------------------------------------------------
void CSeqProcessDlg::OnButtonForward() 
{
	UpdateData(TRUE);

	if( m_check_frame)
	{
		OnPlayNext();
	}
	else
	{
		m_direction = 1;
		OnPlayStart();
	}
	
}
//--------------------------------------------------------------------------------

void CSeqProcessDlg::OnButtonBackward() 
{
	UpdateData(TRUE);

	if( m_check_frame)
	{
		OnPlayPrev();
	}
	else
	{
		m_direction = -1;
		OnPlayStart();
	}
	
}
//--------------------------------------------------------------------------------

void CSeqProcessDlg::OnButtonHome() 
{
	GotoFrame(m_fromframe);

}
//--------------------------------------------------------------------------------

void CSeqProcessDlg::OnButtonEnd() 
{
	GotoFrame(m_toframe);
	
}
//--------------------------------------------------------------------------------

void CSeqProcessDlg::OnButtonStop() 
{
	OnPlayStop();
	
}
//--------------------------------------------------------------------------------

void CSeqProcessDlg::GotoFrame( int fr)
{
	currentFrame = fr - dlgLoadSequence.m_from;
	DrawCurrentImage();
	
	// Update the slider display
	m_currentframe = currentFrame + dlgLoadSequence.m_from;
	m_sliderframe.SetPos(m_currentframe);
	UpdateData(FALSE);
}

//--------------------------------------------------------------------------------
void CSeqProcessDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	UpdateData(TRUE);
	int pos = m_sliderframe.GetPos();

	//if( pos < m_fromframe) pos = m_fromframe;
	//else if( pos > m_toframe) pos = m_toframe;

	m_sliderframe.SetPos( pos);
	UpdateData(FALSE);

	if(m_currentframe != pos)
	{
		m_currentframe = pos;
		currentFrame = m_currentframe - dlgLoadSequence.m_from;
		UpdateData(FALSE);
		DrawCurrentImage();
	}
		
	CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
//--------------------------------------------------------------------------------

void CSeqProcessDlg::OnChangeEditCurrentframe() 
{
	isEditCurrentFrameNumber = TRUE;	
}

//--------------------------------------------------------------------------------

void CSeqProcessDlg::OnKillfocusEditCurrentframe() 
{
	// Frame number not changed
	UpdateData(TRUE);
}
//--------------------------------------------------------------------------------

void CSeqProcessDlg::OnChangeEditFromframe() 
{
	isEditFromFrameNumber = TRUE;	
	
}
//--------------------------------------------------------------------------------

void CSeqProcessDlg::OnKillfocusEditFromframe() 
{
	// Frame number not changed
	UpdateData(TRUE);
	
}
//--------------------------------------------------------------------------------

void CSeqProcessDlg::OnChangeEditToframe() 
{
	isEditToFrameNumber = TRUE;	
	
}
//--------------------------------------------------------------------------------

void CSeqProcessDlg::OnKillfocusEditToframe() 
{
	// Frame number not changed
	UpdateData(TRUE);
	
}

//--------------------------------------------------------------------------------

void CSeqProcessDlg::OnCheckFrameMode() 
{
	UpdateData(TRUE);
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -