Нарисуйте/создайте ID2D1RenderTarget с прозрачным цветом

У меня есть написанный класс, который может отображать анимированные GIF-файлы с помощью Direct 2d, как в этом примере из MSDN:

https://code.msdn.microsoft.com/windowsapps/Windows-Imaging-Component-65abbc6a/sourcecode?fileId=127204&pathId=969071766

GIF, который я показываю, представляет собой постоянно растущий/сокращающийся не заполненный синий круг. Все остальные пиксели белые / фон белый.

В отличие от опубликованного примера, я создаю CWnd без подписи и границы, с размером GIF, с ID2D1RenderTarget, заполняющим весь CWnd, и размещаю его над содержимым моего основного фрейма.

Поскольку я никогда раньше не использовал Direct2d, я предположил, что могу просто применить SetLayerdWindow() к моему CWnd, чтобы достичь моей цели — отображать только синий круг.

SetLayeredWindowAttributes(RGB(255,255,255), 204, LWA_ALPHA | LWA_COLORKEY);

Это должно привести к CWnd без белых пикселей + прозрачность 80%. К сожалению, результирующее окно прозрачно на 80%, но ни один из удаленных белых пикселей не отображается.

Почему в этом случае не работает LWA_COLORKEY? И как мне добиться, чтобы мой CWnd или ID2D1HwndRenderTarget отрисовывал белый цвет как полностью прозрачный?!

Примечание:
Кроме того, я просто ради интереса попытался нарисовать полностью прозрачный фон с ID2D1HwndRenderTarget, например:

m_pHwndRT->Clear(D2D1::ColorF(D2D1::ColorF::White, 0.0f));

Microsoft заявляет: «Альфа-значение для создаваемого цвета. Значение альфа-канала находится в диапазоне от 0,0 до 1,0, где 0,0 представляет полностью прозрачный цвет, а 1,0 — полностью непрозрачный цвет. Значение по умолчанию — 1,0».

Что приводит к полностью белому непрозрачному окну... Что заставило меня задуматься, работает ли вообще вся эта прозрачность.


person Jan Raufelder    schedule 01.08.2016    source источник
comment
Не позволяйте системе выделять растровое изображение перенаправления для вашего окна. Пусть он использует только поверхность Direct2D (и флип-цепочку). Вот как это сделать: Windows с C++: высокопроизводительное многослойное размещение окон с помощью механизма композиции Windows.   -  person IInspectable    schedule 01.08.2016
comment
При создании цели рендеринга не забудьте установить формат предварительного умножения. stackoverflow.com/a/10627669/99953   -  person vt.    schedule 11.08.2016