线程加载图像更快,直到它们在 Studio 中消失
Posted
技术标签:
【中文标题】线程加载图像更快,直到它们在 Studio 中消失【英文标题】:Thread loading images faster until they disapear in Studio 【发布时间】:2012-09-13 03:52:41 【问题描述】:我对视觉工作室很陌生。我正在尝试加载图像并将其显示在具有两个按钮启动和停止的 UI 上。每次我完成我的总帧计数时,下一次按下开始时,我的图像加载速度比以前更快,最终图像的速度如此之快,以至于它们消失或显示为黑色。线程速度或图像加载时间随着每个周期的增加而增加。我怎样才能限制这个..或者在显示两个图像之间设置一个时间间隔。谢谢你。 代码如下:
void CmirrorImageDlg::OnBnClickedStart()
m_play = TRUE;
CString num = NULL;
num.Format(_T("Pause"));
m_start.EnableWindow(false);
m_stop.EnableWindow(true);
m_stop.SetWindowTextW(num);
m_pThread = AfxBeginThread(Operate, (LPVOID)this, THREAD_PRIORITY_NORMAL);
void CmirrorImageDlg::OnBnClickedStop()
m_play = FALSE;
CString num = NULL;
num.Format(_T("Resume"));
m_start.EnableWindow(true);
m_stop.EnableWindow(false);
m_start.SetWindowTextW(num);
m_count = 0;
//m_pThread = AfxBeginThread(Operate, (LPVOID)this, THREAD_PRIORITY_ABOVE_NORMAL);
// TODO: Add your control notification handler code here
UINT CmirrorImageDlg::Operate(LPVOID param)
CmirrorImageDlg* pDlg = (CmirrorImageDlg*) param;
CString test;
while ( pDlg->m_play && pDlg->m_count < TOTAL_FRAME_NUMBER)
test.Format(_T("images/%.4d.BMP"),pDlg->m_count);
pDlg->hbitmap = (HBITMAP)LoadImage(NULL,test,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
pDlg->inv_hbitmap = pDlg->GetInvertedBitmap(pDlg->hbitmap, TRUE);
pDlg->inv_hbitmap_1 = pDlg->GetInvertedBitmap(pDlg->hbitmap , FALSE);
//CBitmap map = LoadBitmapW(test);
//filePath = IDB_BITMAP1;
//filePath++;
//IDB_PICTURE2.LoadBitmapW(filePath);
pDlg->m_picture.SetBitmap(pDlg->hbitmap);
pDlg->m_picture_2.SetBitmap(pDlg->inv_hbitmap);
pDlg->m_picture_3.SetBitmap(pDlg->inv_hbitmap_1);
CString num = NULL;
num.Format(_T("%d"),pDlg->m_count);
pDlg->m_label.SetWindowTextW(num);
// TODO: Add your control notification handler code here
pDlg->m_count++;
if(pDlg->m_count >= TOTAL_FRAME_NUMBER)
CString num = NULL;
num.Format(_T("%d"),0);
pDlg->m_count = 0;
pDlg->m_play= false;
pDlg->m_label.SetWindowTextW(num);
pDlg->m_picture.SetBitmap(NULL);
pDlg->m_picture_2.SetBitmap(NULL);
pDlg->m_picture_3.SetBitmap(NULL);
CString num1 = NULL;
num.Format(_T("Stop"));
pDlg->m_start.EnableWindow(true);
pDlg->m_stop.EnableWindow(false);
pDlg->m_stop.SetWindowTextW(num);
num.Format(_T("Start"));
pDlg->m_start.SetWindowTextW(num);
//pDlg->m_pThread->SuspendThread();
return 0;
【问题讨论】:
【参考方案1】:一个相当简单的选择:
为您的对话框设置一个 WM_TIMER,使其每 40 毫秒触发一次(如果您希望每秒 25 帧)。如果不播放,计时器处理程序将不执行任何操作。
当用户点击播放时,您将加载第一张图片,然后设置“正在播放”标志。在计时器处理程序中,它将获取当前加载的图像并将其blit到屏幕上,然后加载下一个图像并返回。当序列中没有更多图像时,您将清除“正在播放”标志。
因为您总是在计时器触发时显示当前图像,所以加载下一张图像需要多长时间并不重要(只要您可以比播放速度更快)。
【讨论】:
以上是关于线程加载图像更快,直到它们在 Studio 中消失的主要内容,如果未能解决你的问题,请参考以下文章
android studio:需要加载随机图像和顶部随机文本,然后将它们保存为 jpeg 以与其他应用程序共享