使用FLASH控件实现SWF2JPG

来源:互联网 发布:画图软件下载 编辑:程序博客网 时间:2024/05/18 20:09

关键代码如下

 CRect rect;
 m_flash.GetWindowRect(&rect);
 rect.SetRect(rect.left,rect.top,rect.left+m_nWidth,rect.top+m_nHeight);
 ScreenToClient(&rect);
 m_flash.MoveWindow(&rect,TRUE);

 SetDlgItemText(IDC_PAUSE,"暂停");
 m_nCurrent=0; 
 if(!LoadIndex())
 {
  MessageBox("读取索引文件失败");
  return;
 }
 StartMovie();
 SetTimer(1,1000,NULL);

void CSwf2jpgDlg::OnTimer(UINT nIDEvent)
{
 // TODO: Add your message handler code here and/or call default
 KillTimer(1);
 Capture2File();
 if(StartMovie())
  SetTimer(1,1000,NULL);
 
 CDialog::OnTimer(nIDEvent);
}

 

void CSwf2jpgDlg::Capture2File()
{
 if(pFlashDC)
  m_flash.ReleaseDC(pFlashDC);

 pFlashDC=m_flash.GetDC();

 Save2Jpg(m_strFileName,pFlashDC,m_nWidth,m_nHeight);

 m_flash.ReleaseDC(pFlashDC);
}

BOOL CSwf2jpgDlg::StartMovie()
{
 if(m_strList.IsEmpty())
  return FALSE;
 m_strFileName=m_strList.RemoveHead();
 m_strFileName=m_strFileName.Left(m_strFileName.GetLength() -1);

 m_flash.SetMovie(m_strFileName);
 m_flash.Play();
 m_flash.SetLoop(TRUE);
 m_flash.SetBackgroundColor(1);

// m_flash.GotoFrame(min(m_nFrame,m_flash.GetTotalFrames()));

// m_flash.GotoFrame(min(m_nFrame,m_flash.GetTotalFrames()));
 m_flash.GotoFrame(m_flash.GetTotalFrames() /2);
// m_flash.Rewind();
 m_flash.Stop();

 CString str;
 str.Format("%d",++m_nCurrent);

 SetDlgItemText(IDC_FILE,m_strFileName);
 SetDlgItemText(IDC_FINISH,str);
 return TRUE;
}

PS:flash控件的SetLoop(TRUE)是必须的,否刚对于有程序帧的flash控件将会造成截图失败。

程序运行中会出现有的flash文件截图失败后,其后跟着的DC获取图像将会都失败、