从字体到视频帧添加文本

时间:2011-12-16 16:06:45

标签: c# c fonts overlay frame

我正在使用ffmpeg来解码使用DirectShow显示的rtsp流我需要在每个视频帧中添加文本,我还需要记录添加了文本的视频。因此,我无法使用DirectShow覆盖文本,因为它不会保存在原始帧上。对文本的要求(不是一成不变)是它可以是各种字体或大小等。

我假设我需要创建文本的原始位图并将其覆盖在原始BGR图像之上。我知道如何写当前的图像。我不知道的是如何从字体XX,大小,XX,字符串XX到一些原始数据叠加。

有人可以建议我应该做什么或指出我正确的方向。我的低级代码是C / C ++,但这是由C#.Net应用程序驱动的。

感谢任何帮助。

感谢。

1 个答案:

答案 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