2011-12-16 4 views
1

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

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

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

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

Спасибо.

ответ

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 
+0

Отлично спасибо. К сожалению, у меня не будет шанса пропустить это еще несколько недель. – integra753

Смежные вопросы