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


Арифметический составной эффект

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

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

Формула

Для вычисления этого эффекта используется формула.

Outputrgba = C1 * Sourcergba * Destinationrgba + C2 * Sourcergba + C3 * Destinationrgba + C4

Где C1, C2, C3, C4 — это заданные коэффициенты.

Коэффициенты сопоставляют со значениями в D2D1_VECTOR_4F (x, y, z, w):

  • x = C1
  • y = C2
  • z = C3
  • w = C4

Пример изображения

Простой пример — добавление исходного и целевого пикселей. В этом примере 2 скругленные прямоугольники объединяются вместе. Исходный прямоугольник имеет синий цвет, а целевой объект — красный.

На этом изображении приведены выходные данные арифметического составного эффекта с коэффициентами уравнения, заданными для значений здесь.

  • C1 = 0
  • C2 = 1
  • C3 = 1
  • C4 = 0

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

В результате добавляются значения пикселей для источника и назначения. Области, в которых прямоугольники не перекрывают значения RGBA, имеют значение 0. Если прямоугольники перекрываются, цвет является пурпурным, так как значения R и B являются максимальными.

Вот еще один пример изображения с кодом.

Перед изображением 1
первое исходное изображение перед эффектом.
Перед изображением 2
второе изображение перед эффектом.
После
изображение после преобразования.
ComPtr<ID2D1Effect> arithmeticCompositeEffect;
m_d2dContext->CreateEffect(CLSID_D2D1ArithmeticComposite, &arithmeticCompositeEffect);

arithmeticCompositeEffect->SetInput(0, bitmap);
arithmeticCompositeEffect->SetInput(1, bitmapTwo);
arithmeticCompositeEffect->SetValue(D2D1_ARITHMETICCOMPOSITE_PROP_COEFFICIENTS, D2D1::Vector4F(0.0f, 0.5f, 0.5f, 0.0f));

m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(arithmeticCompositeEffect.Get());
m_d2dContext->EndDraw();

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

Отображаемое перечисление имен и индексов Описание
Коэффициенты
D2D1_ARITHMETICCOMPOSITE_PROP_COEFFICIENTS
Коэффициенты для уравнения, используемого для создания двух входных изображений. Коэффициенты являются унитарными и неограниченными. Тип D2D1_VECTOR_4F.
Значение по умолчанию : {1.0f, 0.0f, 0.0f, 0.0f}.
ClampOutput
D2D1_ARITHMETICCOMPOSITE_PROP_CLAMP_OUTPUT
Эффект зажимает значения цвета в диапазоне от 0 до 1, прежде чем эффект передаст значения следующему эффекту в графе.
Если для этого параметра задано значение TRUE, эффект зажимет значения. Если для этого параметра задано значение FALSE, эффект не будет зажимать значения цвета, но другие эффекты и выходная поверхность могут зажать значения, если они не имеют достаточной точности.
Тип BOOL.
Значение по умолчанию — FALSE.

Выходное растровое изображение

Выходное растровое изображение зависит от значений коэффициента. Это возможные размеры выходных растровых изображений.

  • Если C1 является единственным ненулевым коэффициентом, размер выходных данных — это пересечение входных прямоугольников.
  • Если C2 является единственным ненулевым коэффициентом, размер выходных данных равен размеру прямоугольника источника.
  • Если C3 является единственным ненулевым коэффициентом, размер выходных данных равен размеру прямоугольника назначения.
  • Если все коэффициенты равны нулю, размер выходных данных представляет собой пустой прямоугольник.
  • Для всех остальных значений коэффициентов размер выходных данных представляет собой объединение входных прямоугольников.

Требования

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

ID2D1Effect