我正在使用ffmpeg解码一个rtsp流,该流使用DirectShow显示,我需要在每个视频帧中添加文本,还需要在添加文本的情况下录制视频。因此,我无法使用DirectShow覆盖文本,因为它不会在要保存的原始帧上。对文本的(尚未确定)要求是它可以是各种字体或大小等。
我假设我需要创建我的文本的原始位图,并将其覆盖在我的原始BGR图像之上。我知道如何改写当前的图像。我不知道的是如何从字体XX,大小XX,字符串XX到一些原始数据来覆盖。
有人能建议我应该做什么或给我指明正确的方向吗。我的低级代码是在C/C++中,但这是从C.NET应用程序驱动的。
如有任何帮助,我们将不胜感激。
谢谢。
最佳答案
必须获取要在其上写入文本的原始位图的设备上下文(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