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


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

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

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

Формула

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

Выходныеrgba = 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