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


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

Используйте эффект смешивания для объединения двух изображений. Этот эффект имеет 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();

Свойства эффекта

Отображаемое имя и перечисление индексов Описание
Режим
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 Данный:
  • Координата сцены 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, значения находятся в секторе красных или magenta, где R>B>G.

математический эквайтон шаг один из шести преобразовывая цвет 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.

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

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

математический эквайтон шаг шесть из шести преобразовывая цвет 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