仅在Sublime中保存到映照驱动器时出错:没法使用用户映照部份打开文件-英雄云拓展知识分享
380
2024-01-21
我正在尝试整理一个以原始格式存储的视频的简单视频播放器。这些视频可选经过卷积过滤器。我的Cwinapp课程有3种相干方法。首先,选择视频并将其放置在指针中时 viewingVideo
,我分配了两个位图:
void CMyApp::setBitmaps() {if (viewingVideo == NULL)
return;

bmp1 = CreateDIBSection(dc, viewingVideo->bmi, DIB_RGB_COLORS, NULL, NULL, 0);
bmp2 = CreateDIBSection(dc, viewingVideo->bmi, DIB_RGB_COLORS, NULL, NULL, 0);
}
然后,当用户按下播放时,我初始化调用以下两个方法的计时器,以播放30 fps:
void CMyApp::updateVideoFrame() {if (viewingVideo == NULL)
return;
if (viewingKernel != NULL) {
applyKernelFFT(viewingKernel, viewingVideo, currentFrame);
}
if (viewingKernel == NULL)
SetDIBits(dc, bmpToggle ? bmp2 : bmp1, 0, viewingVideo->height, (char*)(viewingVideo->data) + currentFrame*viewingVideo->bpp*viewingVideo->width*viewingVideo->height, viewingVideo->bmi, DIB_RGB_COLORS);
else
SetDIBits(dc, bmpToggle ? bmp2 : bmp1, 0, viewingVideo->height, (char*)(viewingVideo->filtered_data), viewingVideo->bmi, DIB_RGB_COLORS);
bmpToggle = !bmpToggle;
}
void CMyApp::updateVideoScreen() {
CMyView* view = CMyView::GetView(); //returns the active view
view->m_Video.SetBitmap(bmpToggle ? bmp1 : bmp2);
CRect update;
view->m_Video.GetWindowRect(&update);
view->ScreenToClient(&update);
//update.DeflateRect(update.Width()/2⑴, update.Height()/2 - 1);
InvalidateRect(*AfxGetMainWnd(), update, FALSE);
}
在任何给定时间,方法应使用不同的位图。当我启动这些计时器时,屏幕上有很多闪烁。当我不服从 DeflateRect
打电话,制作 update
一个2x2像素矩形,很明显,实际上有两个闪烁的来源:有时全部图片闪烁,有时只有中心的2x2矩形。
我尝试了其他地方建议的常见修复程序,例如 WM_ERASEBKGND
在 CMyView
。这没有帮助。我如何避免这类闪烁?
对任何想从软件中删除癫痫正告的人,这就是修复闪烁所需的内容。阿德里安·麦卡锡(Adrian McCarthy)的建议是正确的。在 updateVideoScreen
,我替换了 view->m_Video.SetBitmap(bmpToggle ? bmp1 : bmp2);
和 SelectObject(dc, bmpToggle ? bmp1 : bmp2);
,因此位图数据发送到我的内存DC,而不是将其发送到控件。然后我覆盖了 OnPaint()
打电话 BitBlt
将位图写入视频控制所在的屏幕:
void CMTFBoostView::OnPaint(){
CRect rect;
m_Video.GetWindowRect(&rect);
ScreenToClient(&rect);
video* v = ((CMTFBoostApp*)AfxGetApp())->viewingVideo;
CDC* src = ((CMTFBoostApp*)AfxGetApp())->cdc;
CDC* dc = GetDC();
if (v != NULL && dc->RectVisible(rect)) {
dc->BitBlt(rect.left, rect.top, v->width, v->height, src, 0, 0, SRCCOPY);
}
ReleaseDC(dc);
CFormView::OnPaint();
}
前几行是将视频放在我之前具有的视频的有点黑客(Hacker) - 从视野中完全删除Cstatic控件可能会更加干净。不管如何,这不会闪烁显示视频。
免责声明:
本网址(www.yingxiongyun.com)发布的材料主要源于独立创作和网友匿名投稿。此处提供的所有信息仅供参考之用。我们致力于提供准确且可信的信息,但不对材料的完整性或真实性作出任何保证。用户应自行验证相关信息的正确性,并对其决策承担全部责任。对于由于信息的错误、不准确或遗漏所造成的任何损失,本网址不承担任何法律责任。本网站所展示的所有内容,如文字、图像、标志、音频、视频、软件和程序等的版权均属于原创作者。如果任何组织或个人认为网站内容可能侵犯其知识产权,或包含不准确之处,请即刻联系我们进行相应处理。
发表评论
暂时没有评论,来抢沙发吧~