HRESULT CVideoRenderer: oRenderSample(IMediaSample *pMediaSample)
{
CheckPointer(pMediaSample,E_POINTER);
m_DrawImage.DrawImage(pMediaSample); // вывод видео
TCHAR Str[] = TEXT("TextOut\0");
HDC hdc = m_VideoText.GetWindowHDC();
SetBkMode(hdc, TRANSPARENT);
TextOut(hdc, 0, 0, Str, lstrlen(Str));
ReleaseDC(hdc);
return S_OK;
} // DoRenderSample
вывод простых графических объектов и текста поверх видеоизображения
В своем рендере вывожу видеоизображение. Поверх изображения вывожу текст с помощью TextOut(). Возникла проблема: текст периодически мерцает. Кто-нибудь знает какими средствами с этим бороться, кроме средств DirectDraw?
пардон за оффф, ты не подскажешь ответ на мой вопрос :)
Цитата:
В своем рендере вывожу видеоизображение. Поверх изображения вывожу текст с помощью TextOut(). Возникла проблема: текст периодически мерцает. Кто-нибудь знает какими средствами с этим бороться, кроме средств DirectDraw?
приведи код
// на основе примера Samples -> C++ -> DirectShow -> Filters -> SampVid
HRESULT CVideoRenderer: oRenderSample(IMediaSample *pMediaSample)
{
CheckPointer(pMediaSample,E_POINTER);
m_DrawImage.DrawImage(pMediaSample); // вывод видео
TCHAR Str[] = TEXT("TextOut\0");
HDC hdc = m_VideoText.GetWindowHDC();
RECT TargetRect;
m_DrawImage.GetSourceRect(&TargetRect);
SetBkMode(hdc, TRANSPARENT);
uAlignPrev = SetTextAlign(hdc, TA_UPDATECP);
MoveToEx(hdc, 10, 50, (LPPOINT) NULL);
TextOut(hdc, 0, 0, Str, lstrlen(Str));
SetTextAlign(hdc, uAlignPrev);
return NOERROR;
} // DoRenderSample
Из соображений, что координаты текста БУДУТ постоянно меняться (так требуется), то вывожу текст именно в этой функции.
Код:
[COLOR="Blue"]в фильтре[/COLOR]
Берешь Наследуешь класс СBaseRender
создаешь окошко свое
[COLOR="Teal"]В методе DoRenderSample[/COLOR]
1. захватываешь контекст окошка
2. приобразовуешь биты приходящие в семпле в BMP и заносишь эту BMP в совметимый коетекст с твоим окошком
3. сверху выводишь текст(в совместимом контексте)
4. переносишь совместимый контекст на основной(BitBlt)
это будет способ создания видио рендера использующий старого доброго GDI
1. захватываешь контекст окошка
2. приобразовуешь биты приходящие в семпле в BMP и заносишь эту BMP в совметимый коетекст с твоим окошком
3. сверху выводишь текст(в совместимом контексте)
4. переносишь совместимый контекст на основной(BitBlt)
[/QUOTE]
И этот метод избавит от мерцания текста??
Как быстро преобразуется sAmple В BMP? Такое преобразование много жрет производительности?