我正在使用ffmpeg来解码使用DirectShow显示的rtsp流我需要在每个视频帧中添加文本,我还需要记录添加了文本的视频。因此,我无法使用DirectShow覆盖文本,因为它不会保存在原始帧上。对文本的要求(不是一成不变)是它可以是各种字体或大小等。
我假设我需要创建文本的原始位图并将其覆盖在原始BGR图像之上。我知道如何写当前的图像。我不知道的是如何从字体XX,大小,XX,字符串XX到一些原始数据叠加。
有人可以建议我应该做什么或指出我正确的方向。我的低级代码是C / C ++,但这是由C#.Net应用程序驱动的。
感谢任何帮助。
感谢。
答案 0 :(得分:1)
您必须获取要在其上写入文本的原始位图的设备上下文(HDC),并执行以下操作:
CString out = "My String";
LOGFONT LogFont;
memset( &LogFont, 0, sizeof( LOGFONT ) );
LogFont.lfStrikeOut = 0;
LogFont.lfUnderline = 0;
LogFont.lfHeight = 12;
LogFont.lfEscapement = 0;
LogFont.lfQuality = CLEARTYPE_QUALITY;
LogFont.lfItalic = FALSE;
strcpy(LogFont.lfFaceName, "Arial");
HFONT font = CreateFontIndirect(&LogFont);
HDC dc = // Get your DC from the Raw Bitmap
SelectObject(dc, font);
SetTextColor(dc, RGB(255, 255, 255) );
SetBkMode(dc, TRANSPARENT);
TextOut(dc, 0, 0, out.GetBuffer(), out.GetLength() );
DeleteObject( font );
// Release the Raw Bitmap DC