Эффект смешения
Используйте эффект смешивания для объединения двух изображений. Этот эффект имеет 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();
Отображаемое имя и перечисление индексов | Description |
---|---|
Режим D2D1_BLEND_PROP_MODE |
Режим смешивания, используемый для эффекта. Дополнительные сведения см . в режимах blend. Тип D2D1_BLEND_MODE. Значение по умолчанию — D2D1_BLEND_MODE_MULTIPLY. |
В таблице показаны все режимы смешения этого эффекта. Вспомогательные функции, необходимые для вычисления выходных данных эффекта, приведены в следующем разделе.
Цвет: OPRGB = f(FRGB, B RGB) * F A * B + F RGB * F A * (1 - BA) + B RGB * BA * (1 - FA)
Альфа: OA = FA * (1 - BA) + BA
Где:
- OPRGB — это предварительно умноженный цвет выходных данных
- OA — output Alpha
- BRGB — это незамеченный цвет назначения
- BA — это альфа-альфа назначения
- 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(F RGB, BRGB) = FRGB + BRGB 2 * F RGB * B RGB |
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].
Компонент светимости вычисляется с помощью весов RGB здесь:
- kR = 0,30
- kG = 0,59
- kB = 0,11
Это помещает S и L в диапазон [0.0, 1.0] и H в диапазоне [-1.0, 5.0].
Чтобы преобразовать другой способ, мы используем обратное из предыдущих вычислений.
Если S = 0, то R = G = B L =
В противном случае существует шесть вариантов зависимостей:
Если H больше 0, значения находятся в секторе красного/магенциа, где 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, значения находятся в секторе синего или 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 |