Прочитать на английском

Поделиться через


Эффект смешения

Используйте эффект смешивания для объединения двух изображений. Этот эффект имеет 26 режимов смешения.

CLSID для этого эффекта CLSID_D2D1Blend.

Примеры смешивания

Ниже приведен пример изображения каждого режима смешивания эффекта смешения. Полный список режимов смешения и соответствующих свойств режима находятся в следующем разделе.

Пример эффекта снимок экрана всех доступных режимов смешения.

Ниже приведен еще один пример использования режима исключения.

Перед изображением 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) = Математическая формула для линейного эффекта dodge.
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 Исходные данные:
  • Координата сцены XY для текущего пикселя
  • Детерминированный генератор псевдо-случайных чисел rand(XY) на основе начальной координаты XY с непреднамеренное распределение значений от [0, 1]

Математические формулы для эффекта растворения смеси.
D2D1_BLEND_MODE_SUBTRACT Базовая формула смешивания только для альфа-символов. Математическая формула для вычитания эффекта смешения.
D2D1_BLEND_MODE_DIVISION Базовая формула смешивания только для альфа-символов. Математическая формула для эффекта смешения деления.

Примечание

Для всех режимов Blend выходное значение предварительно зажато и зажато в диапазоне [0, 1].

Преобразования цветового пространства HSL

Компонент светимости вычисляется с помощью весов RGB здесь:

  • kR = 0,30
  • kG = 0,59
  • kB = 0,11

Преобразование из RGB в HSL

математическая формула, описывающая преобразование из rgb-цвета в цвет hsl.

Это помещает S и L в диапазон [0.0, 1.0] и H в диапазоне [-1.0, 5.0].

Преобразование из HSL в RGB

Чтобы преобразовать другой способ, мы используем обратное из предыдущих вычислений.

Если S = 0, то R = G = B L =

В противном случае существует шесть вариантов зависимостей:

Если H больше 0, значения находятся в секторе красного/магенциа, где R>B G.>

математический equaiton шаг один из шести преобразовывая цвет hsl в rgb.

Если H больше или равно 0 и меньше 1, значения находятся в красном или желтом секторе, где R>G>B.

математический equaiton шаг два из шести преобразовывая цвет hsl в rgb.

Если H больше или равно 1 и меньше 2, значения находятся в желтом или зеленом секторе, где G>R>B.

математический equaiton шаг три из шести преобразовывая цвет hsl в rgb.

Если H больше или равно 2 и менее 3, значения находятся в зеленом или циновом секторе, где G>B>R.

математический equaiton шаг четыре из шести преобразовывая цвет hsl в rgb.

Если H больше или равно 3 и менее 4, значения находятся в секторе cyan/blue, где B>G>R.

математический equaiton шаг пять из шести преобразовывая цвет hsl в rgb.

Если H больше или равно 4, значения находятся в секторе синего или magenta, где B>R>G.

математический equaiton шаг шесть из шести преобразовывая цвет hsl в rgb.

Так как режимы смешивания делают произвольные сочетания компонентов HSL из двух разных цветов, обычно для преобразованного значения RGB не требуется, то есть один или несколько компонентов канала могут находиться вне юридического диапазона [0,0, 1.0]. Эти цвета возвращаются в гамму путем минимального уменьшения насыщенности, сохраняя как оттенки, так и светимость:

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

Выходной растровый рисунок

Выходной растровый рисунок для этого эффекта всегда является размером объединения двух входных изображений.

Пример кода

Пример этого эффекта можно скачать пример режимов составных эффектов Direct2D.

Требования

Требование Значение
Минимальная версия клиента Windows 8 и Обновление платформы для Windows 7 [классические приложения | Приложения Магазина Windows]
Минимальная версия сервера Windows 8 и Обновление платформы для Windows 7 [классические приложения | Приложения Магазина Windows]
Верхний колонтитул d2d1effects.h
Библиотека d2d1.lib, dxguid.lib

ID2D1Effect