Реализация пары процедур для работы с оверлеями средствами DirectDraw на De
Задача:
1) Создать в видеопамяти оверлей средствами DirectDraw
в режиме fullscreen
2) Переключить оврелей в один из 2-х режимов:
РЕЖИМ 1: оврлей ложится как обои рабочего стола
(с помощью задание цвета приемника), как, например
делает winamp avs plugin в режиме destop overlay;
РЕЖИМ 2: оверлей остается активным, но никак не
выводится на экран;
3) Вывести на этот оврлей произвольный битмап
(изображение).
Основное и главное требование: Этот оверлей должен
корректно отображаться на экране телевизора,
подключенного к видеокарте через s-video выход.
Вывод должен производится на ТВ в режиме
видеокарты "Театр". Должно работать на Radeon 9550.
Подробнее о режиме "Театр": Режим поддерживается
современными видеокартами. При нем на на тв-выход
выводится только содержимое оверлея в памяти видекарты,
а не весь рабочий стол (как в режиме клон). Причем этот
оверлей может автоматически растягиваться по размерам
экрана ТВ (настраивается в драйверах,
опции "Окно"/"Overlays").
Например, в этом режиме при просмотре видео через
программу-плеер (используя оверлей) на ТВ экран будет
отображать только содержимое видеоокна плеера (без
рабочего стола).
Можно даже полностью свернуть плеер, скрыв оверлей с
рабочего стола, но на ТВ он по прежнему будет отображаться
фулскрин или нет (опционально).
Т.е. вышеперечисленные пункты должны генерировать
оверлей с изображением, который будет грамотно выводится
на ТВ в режиме видеокарты "Театр" (поддерживать
масштабирование).
Все это необходимо реализовать на Delphi.
Я пытался сам реализовать данный функционал, но ввиду
полного отсутствия опыта в работе с библиотекой DirectX
у меня возникла проблема, которую я не смог решить:
Оврлей на рабочем столе монитора выводился как надо,
НО в то же самое время на телевизоре отображался лишь
пустой прямоугольник оврелея, залитый цветом фона.
От исполнителя мне необходимы процедуры:
1) InitOverlay(width,height: integer);
Инициализация DirectX, создание поврехности.
width, height: размеры битмапа который будет выводится на
оверлей
2) ShowOverlay(mode: integer);
Активирует оверлей в режимах:
mode=1: скрытый
mode=2: на обои рабчего стола
4) DrawBitmap(Bitmap: TBitmap);
Выводит в оврелей изображение Bitmap (24 или 32 бит).
5) CloseOverlay();