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


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

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

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(Растровая карта смещения (x,y))-0,5),y+ scale*(YChannelSelector(Точечный рисунок смещения (x,y))-0,5))

Где:

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

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

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

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

Отображаемое перечисление имен и индексов Тип и значение по умолчанию Описание
Масштабирование
D2D1_DISPLACEMENTMAP_PROP_SCALE
FLOAT
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 Эффект извлекает выходные данные интенсивности из альфа-канала.

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

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

Выходное растровое изображение? Pixels=(Input Bitmap Size?( DIPs)+Scale)*(User DPI/96)

Выходное растровое изображениеy Pixels=(Input Bitmap Sizey(DIP) + Scale)*(User DPI/96)

Требования

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

ID2D1Effect