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


Эффект карты смещения

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

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

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

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

displacementMapEffect->SetInput(0, bitmap);
displacementMapEffect->SetValue(D2D1_DISPLACEMENTMAP_PROP_SCALE, 100.0f);

// The second input of the displacement effect determines how the input image is transformed.
// For this example, we will use a turbulence effect as the second input to randomly distort the image.
ComPtr<ID2D1Effect> turbulenceEffect;
m_d2dContext->CreateEffect(CLSID_D2D1Turbulence, &turbulenceEffect);
displacementMapEffect->SetInputEffect(1, turbulenceEffect.Get());

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

Расположения пикселей в выходных данных определяются с помощью этой формулы:

C' (x,y)=C(x+ scale*(XChannelSelector(shift Bitmap (x,y)-0,5),y+ scale*(YChannelSelector(Shift Bitmap (x,y)-0.5))

Где:

C (x, y) — это пиксель вывода (x, y).
C (x, y) — это пиксель ввода (x, y).
растровое изображение смещения (x, y) — это интенсивность смещения пикселей по указанным координатам.
XChannelSelector интенсивность выбранного канала RGBA из растрового изображения перемещения, которое перемещает входное изображение в направлении X.
YChannelSelector интенсивность выбранного канала RGBA из растрового изображения перемещения, которое перемещает входное изображение в направлении Y.

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

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

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

Отображаемое имя и перечисление индексов Тип и значение по умолчанию Описание
Шкала
D2D1_DISPLACEMENTMAP_PROP_SCALE
ПЛАВАТЬ
0.0f
Умножает интенсивность выбранного канала из изображения смещения. Чем выше задано это свойство, тем больше эффект перемещает пиксели
XChannelSelect
D2D1_DISPLACEMENTMAP_PROP_X_CHANNEL_SELECT
D2D1_CHANNEL_SELECTOR
D2D1_CHANNEL_SELECTOR_A
Эффект извлекает интенсивность из этого канала цвета и использует его для пространственного перемещения изображения в направлении X. Дополнительные сведения см. в каналах цветов.
YChannelSelect
D2D1_DISPLACEMENTMAP_PROP_Y_CHANNEL_SELECT
D2D1_CHANNEL_SELECTOR
D2D1_CHANNEL_SELECTOR_A
Эффект извлекает интенсивность из этого канала цвета и использует его для пространственного перемещения изображения в направлении Y. Дополнительные сведения см. в каналах цветов.

Цветовые каналы

Перечисление Описание
D2D1_CHANNEL_SELECTOR_R Эффект извлекает выходные данные интенсивности из красного канала.
D2D1_CHANNEL_SELECTOR_G Эффект извлекает выходные данные интенсивности из зеленого канала.
D2D1_CHANNEL_SELECTOR_B Эффект извлекает выходные данные интенсивности из синего канала.
D2D1_CHANNEL_SELECTOR_A Эффект извлекает выходные данные интенсивности из альфа-канала.

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

Можно определить максимальный размер выходной растровой карты с помощью следующих уравнений:

Выходной растровый рисунок? Пиксели=(Размер растрового изображения ввода?( DIPs)+Scale)*(DPI пользователя/96)

Выходные растровые картыy Пикселей=(Размер битового изображения вводаy(DIPs) + Scale)*(DPI пользователя/96)

Требования

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

ID2D1Effect