Эффект смешения
Используйте эффект смешивания для объединения двух изображений. Этот эффект имеет 26 режимов смешения.
CLSID для этого эффекта CLSID_D2D1Blend.
- примеры смешивания
- свойства эффекта
- режимы смешивания
- преобразования цветового пространства HSL
- растровое изображение вывода
- пример кода
- требования
- связанные разделы
Примеры смешивания
Ниже приведен пример изображения каждого режима смешивания эффекта смешения. Полный список режимов смешения и соответствующих свойств режима находятся в следующем разделе.
Ниже приведен еще один пример использования режима исключения.
Перед изображением 1 |
---|
![]() |
Перед изображением 2 |
![]() |
После |
![]() |
ComPtr<ID2D1Effect> blendEffect;
m_d2dContext->CreateEffect(CLSID_D2D1Blend, &blendEffect);
blendEffect->SetInput(0, bitmap);
blendEffect->SetInput(1, bitmapTwo);
blendEffect->SetValue(D2D1_BLEND_PROP_MODE, D2D1_BLEND_MODE_EXCLUSION);
m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(blendEffect.Get());
m_d2dContext->EndDraw();
Свойства эффекта
Отображаемое имя и перечисление индексов | Описание |
---|---|
Режим D2D1_BLEND_PROP_MODE |
Режим смешивания, используемый для эффекта. Дополнительные сведения см. в режимах Blend. Тип D2D1_BLEND_MODE. Значение по умолчанию — D2D1_BLEND_MODE_MULTIPLY. |
Режимы смешения
В таблице показаны все режимы смешения этого эффекта. Вспомогательные функции, необходимые для вычисления выходных данных эффекта, приведены в следующем разделе.
Цвет: OPRGB = f(FRGB, BRGB) * FA * BA + FRGB * FA * (1 - BA) + BRGB * BA * (1 - FA)
Альфа: OA = FA * (1 - BA) + BA
Где:
- PRGB — это предварительно умноженный выходной цвет
- OA — Вывод Альфа
- BRGB — это цвет назначения без умножения
- BА является конечным альфа-каналом
- FRGB — это цвет источника без предварительно умножения
- FA является исходным альфа-кодом
- f(SRGB, DRGB) — это функция смешения, которая зависит от режима смешивания
Для некоторых режимов смешения требуется преобразование в цветовое пространство (HSL) на RGB и от его оттенка, насыщенности, светимости (HSL).
Перечисление | Уравнение |
---|---|
D2D1_BLEND_MODE_DARKEN | Базовая формула смешивания только для альфа-символов.
![]() |
D2D1_BLEND_MODE_MULTIPLY | Базовая формула смешивания только для альфа-символов.
![]() |
D2D1_BLEND_MODE_COLOR_BURN | Основные формулы смешивания с f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_LINEAR_BURN | Основные формулы смешения с f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_DARKER_COLOR | Базовая формула смешивания только для альфа-символов.
![]() |
D2D1_BLEND_MODE_LIGHTEN | Базовая формула смешивания только для альфа-символов.
![]() |
D2D1_BLEND_MODE_SCREEN | Базовая формула смешивания только для альфа-символов.
![]() |
D2D1_BLEND_MODE_COLOR_DODGE | Основные формулы смешения с f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_LINEAR_DODGE | Основные формулы смешивания с f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_LIGHTER_COLOR | Базовая формула смешивания только для альфа-символов.
![]() |
D2D1_BLEND_MODE_OVERLAY | Основные формулы смешения с f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_SOFT_LIGHT | Основные формулы смешения с f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_HARD_LIGHT | Основные формулы смешивания с f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_VIVID_LIGHT | Основные формулы смешивания с f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_LINEAR_LIGHT | Основные формулы смешения с f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_PIN_LIGHT | Основные формулы смешения с f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_HARD_MIX | Основные формулы смешивания с f(FRGB, BRGB) = ![]() |
D2D1_BLEND_MODE_DIFFERENCE | Основные формулы смешивания с f(FRGB, BRGB) = abs(FRGB - BRGB) |
D2D1_BLEND_MODE_EXCLUSION | Основные формулы смешивания с f(FRGB, BRGB) = FRGB + BRGB 2 * FRGB * BRGB |
D2D1_BLEND_MODE_HUE | Базовая формула смешивания только для альфа-символов.
![]() |
D2D1_BLEND_MODE_SATURATION | Базовая формула смешивания только для альфа-символов.
![]() |
D2D1_BLEND_MODE_COLOR | Базовая формула смешивания только для альфа-символов.
![]() |
D2D1_BLEND_MODE_LUMINOSITY | Базовая формула смешивания только для альфа-символов.
![]() |
D2D1_BLEND_MODE_DISSOLVE | Данный:
![]() |
D2D1_BLEND_MODE_SUBTRACT | Базовая формула смешивания только для альфа-символов.
![]() |
D2D1_BLEND_MODE_DIVISION | Базовая формула смешивания только для альфа-символов.
![]() |
Заметка
Для всех режимов Blend выходное значение предварительно зажато и зажато в диапазоне [0, 1].
Преобразования цветового пространства HSL
Компонент светимости вычисляется с помощью весов RGB здесь:
- kR = 0,30
- kG = 0,59
- kB = 0,11
Преобразование из RGB в HSL
Это помещает S и L в диапазоне [0.0, 1.0] и H в диапазоне [-1.0, 5.0].
Преобразование из HSL в RGB
Чтобы преобразовать другой способ, мы используем обратное из предыдущих вычислений.
Если S = 0, R = G = B = L
В противном случае существует шесть вариантов зависимостей:
Если H больше 0, значения находятся в секторе красных или magenta, где R>B>G.
Если H больше или равно 0 и меньше 1, значения находятся в красном или желтом секторе, где R>G>B.
Если H больше или равно 1 и меньше 2, значения находятся в желтом или зеленом секторе, где G>R>B.
Если H больше или равно 2 и меньше 3, значения находятся в зеленом или циновом секторе, где G>B>R.
Если H больше или равно 3 и меньше 4, значения находятся в секторе cyan/blue, где B>G>R.
Если H больше или равно 4, значения находятся в секторе blue/magenta, где B>R>G.
Так как режимы смешивания делают произвольные сочетания компонентов HSL из двух разных цветов, обычно для преобразованного значения RGB не требуется, то есть один или несколько компонентов канала могут находиться вне юридического диапазона [0,0, 1.0]. Эти цвета возвращаются в гамму путем минимального уменьшения насыщенности, сохраняя как оттенки, так и светимость:
Выходной растровый рисунок
Выходной растровый рисунок для этого эффекта всегда является размером объединения двух входных изображений.
Пример кода
Пример этого эффекта можно скачать пример режимов составных эффектов Direct2D.
Требования
Требование | Ценность |
---|---|
Минимальный поддерживаемый клиент | Windows 8 и Обновление платформы для Windows 7 [классические приложения | Приложения Магазина Windows] |
Минимальный поддерживаемый сервер | Windows 8 и Обновление платформы для Windows 7 [классические приложения | Приложения Магазина Windows] |
Заголовок | d2d1effects.h |
Библиотека | d2d1.lib, dxguid.lib |