Добавить текст из шрифта в видеокадр - PullRequest
1 голос
/ 16 декабря 2011

Я использую ffmpeg для декодирования потока rtsp, который отображается с помощью DirectShow. Мне нужно добавить текст в каждый видеокадр, а также записать видео с добавленным текстом. Поэтому я не могу использовать DirectShow для наложения текста, поскольку он не будет сохранен в необработанном кадре. Требование к тексту (пока не указано в камне) заключается в том, что он может быть различных шрифтов или размеров и т. Д.

Тогда я предполагаю, что мне нужно будет создать необработанный растровый рисунок моего текста и наложить его поверх моего необработанного изображения BGR. Я знаю, как написать поверх текущего изображения. Чего я не знаю, так это как перейти от шрифта XX, размера, XX, строки XX к некоторым необработанным данным для наложения.

Может ли кто-нибудь подсказать, что мне следует делать, или указать мне правильное направление. Мой низкоуровневый код написан на C / C ++, но он запускается из приложения C # .Net.

Любая помощь приветствуется.

Спасибо.

1 Ответ

1 голос
/ 16 января 2012

Вам нужно получить контекст устройства (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
...