Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

вывод простых графических объектов и текста поверх видеоизображения

21K
04 октября 2006 года
_ant_
4 / / 04.10.2006
Здравствуйте.

В своем рендере вывожу видеоизображение. Поверх изображения вывожу текст с помощью TextOut(). Возникла проблема: текст периодически мерцает. Кто-нибудь знает какими средствами с этим бороться, кроме средств DirectDraw?
378
04 октября 2006 года
KurL
171 / / 01.08.2005
пардон за оффф, ты не подскажешь ответ на мой вопрос :)
http://forum.codenet.ru/showthread.php?t=30170
5.9K
05 октября 2006 года
Zushenskiy
161 / / 29.06.2006
Цитата:

В своем рендере вывожу видеоизображение. Поверх изображения вывожу текст с помощью TextOut(). Возникла проблема: текст периодически мерцает. Кто-нибудь знает какими средствами с этим бороться, кроме средств DirectDraw?


приведи код

21K
05 октября 2006 года
_ant_
4 / / 04.10.2006
делал по примеру, приведенному в SDK (проект sampvid) в классе CVideoRender есть функция DoRenderSample(), позволяющая рендерить видеопоток в ней добавил код:

// на основе примера 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

Из соображений, что координаты текста БУДУТ постоянно меняться (так требуется), то вывожу текст именно в этой функции.
5.9K
05 октября 2006 года
Zushenskiy
161 / / 29.06.2006
не нужно делать код сложнее и не нужно лишнего
Код:
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


[COLOR="Blue"]в фильтре[/COLOR]
Берешь Наследуешь класс СBaseRender
создаешь окошко свое

[COLOR="Teal"]В методе DoRenderSample[/COLOR]
1. захватываешь контекст окошка
2. приобразовуешь биты приходящие в семпле в BMP и заносишь эту BMP в совметимый коетекст с твоим окошком
3. сверху выводишь текст(в совместимом контексте)
4. переносишь совместимый контекст на основной(BitBlt)

это будет способ создания видио рендера использующий старого доброго GDI
21K
06 октября 2006 года
_ant_
4 / / 04.10.2006
[QUOTE=Zushenskiy]
1. захватываешь контекст окошка
2. приобразовуешь биты приходящие в семпле в BMP и заносишь эту BMP в совметимый коетекст с твоим окошком
3. сверху выводишь текст(в совместимом контексте)
4. переносишь совместимый контекст на основной(BitBlt)
[/QUOTE]

И этот метод избавит от мерцания текста??
Как быстро преобразуется sAmple В BMP? Такое преобразование много жрет производительности?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог