directshow 怎么把字幕合到播放视频里

迷途的书童 2014-05-05 02:20:05
想在现在播放的视频上加上一下提示语!
视频播放是用directX9库进行播放的!

不知道directshow有没有直接在播放视频上加字幕的接口呢?

谢谢!
...全文
202 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
奔跑的北极熊 2014-05-05
  • 打赏
  • 举报
回复
这个可以吗?http://bbs.csdn.net/topics/390179594
迷途的书童 2014-05-05
  • 打赏
  • 举报
回复
//下面为每帧的播放函数,在里面写提示文字 , 使用双缓存 还 是有闪烁
//每帧的播放函数
bool CVideoDraw::displayVideoFrame(SFrameYUV *picture, int imgWidth, int imgHeight)
{
if ((0 == picture) || !mInitialized)
return false;
if (!createYuvOffscreen(imgWidth, imgHeight))
{
return false;
}
mDDrawSurfOffScreen->Lock(NULL, &mDDrawSurfDesc, DDLOCK_WAIT | DDLOCK_WRITEONLY, NULL);
fillOffscreenSurf(picture, imgWidth, imgHeight);
RECT srcRect;
RECT dstRect;
memset(&srcRect, 0, sizeof(RECT));
memset(&dstRect, 0, sizeof(RECT));
setDisplayRect(srcRect, dstRect, imgWidth, imgHeight);
mDDrawSurfOffScreen->Unlock(NULL);
mDDrawResult = mDDrawSurfPrimary->Blt(&dstRect, mDDrawSurfOffScreen, &srcRect, DDBLT_WAIT, NULL);
if (FAILED(mDDrawResult))
{
return false;
}
//以下为使用的双缓存, 为什么输出还有闪烁呢?
HDC dc = GetDC(mWndHandle);
HDC memDC = CreateCompatibleDC(dc);
HBITMAP hBitMap = CreateCompatibleBitmap(dc, 200, 40);
HBITMAP hOldBitMap = (HBITMAP)SelectObject(memDC, hBitMap);
SetBkMode(memDC, TRANSPARENT);
SetTextColor(memDC, RGB(255,0,0));
TextOut(memDC,5, 20,"test..................",20) ;
BitBlt(dc, 5, 20, 200, 40, memDC, 5, 20, SRCCOPY);
SelectObject(memDC, hOldBitMap);
DeleteObject(hBitMap);
DeleteDC(memDC);
ReleaseDC(mWndHandle, dc);
return true;
}
赵4老师 2014-05-05
  • 打赏
  • 举报
回复
仅供参考:
// create the chart surface
lpDDS_Map =
    DDLoadBitmap(lpDD, MAKEINTRESOURCE(IDB_MAP), 0, 0);    
// get a device context for it. This also locks the surface.
lpDDS_Map->GetDC(&hdc);
// set transparent mode so text won’t wipe out whole rectangle
SetBkMode(hdc, TRANSPARENT);
// "create" (i.e. choose) the desired font
hFont = EzCreateFont(hdc, "Times New Roman", 150, 0, EZ_ATTR_ITALIC, 0);
// select it into the device context
SelectObject(hdc, hFont);
// write the text
TextOut(hdc, 50, 50, "Here be Whales", 14);
// delete the font object.
DeleteObject(SelectObject(hdc, GetStockObject(SYSTEM_FONT)));
// release the device context and unlock the surface
lpDDS_Map->ReleaseDC(hdc);

弱水垂钓 2014-05-05
  • 打赏
  • 举报
回复
你需要自己写filter, 或DMO来完成这件事
迷途的书童 2014-05-05
  • 打赏
  • 举报
回复
为什么直接在视频播放的窗口用 Textout输出文字也会闪! 再在输出前做了双缓冲输出也闪烁呢?
迷途的书童 2014-05-05
  • 打赏
  • 举报
回复
[b][color=#0000FF]为什么直接在视频播放的窗口用 Textout输出文字也会闪! 再在输出前做了双缓冲输出也闪烁呢?[/color][/b]

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧