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


Эффект масштабирования

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

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

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

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

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

scaleEffect->SetInput(0, bitmap);

scaleEffect->SetValue(D2D1_SCALE_PROP_CENTER_POINT, D2D1::Vector2F(256.0f, 192.0f));
scaleEffect->SetValue(D2D1_SCALE_PROP_SCALE, D2D1::Vector2F(2.0f, 2.0f));

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

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

Отображаемое перечисление имен и индексов Описание
Масштабирование
D2D1_SCALE_PROP_SCALE
Величина масштабирования в направлении X и Y как отношение размера выходных данных к размеру входных данных. Это свойство D2D1_VECTOR_2Fdefined следующим образом: (шкала X, шкала Y). Масштабируемые значения имеют значение FLOAT, без унитарных значений и должны быть положительными или 0.
Тип — D2D1_VECTOR_2F.
Значение по умолчанию — {1.0f, 1.0f}.
CenterPoint (Центральная точка)
D2D1_SCALE_PROP_CENTER_POINT
Центральная точка масштабирования изображения. Это свойство является D2D1_VECTOR_2F определяется следующим образом: (точка X, точка Y). Единицы находятся в dip.
Используйте свойство центральной точки для масштабирования вокруг точки, отличной от левого верхнего угла.
Тип — D2D1_VECTOR_2F.
Значение по умолчанию — {0.0f, 0.0f}.
BorderMode
D2D1_SCALE_PROP_BORDER_MODE
Режим, используемый для вычисления границы изображения, мягкой или жесткой. Дополнительные сведения см. в разделе Режимы границ .
Тип — D2D1_BORDER_MODE.
Значение по умолчанию — D2D1_BORDER_MODE_SOFT.
Резкость
D2D1_SCALE_PROP_SHARPNESS
В режиме высококачественной кубической интерполяции уровень резкости фильтра масштабирования в виде поплавка в диапазоне от 0 до 1. Значения являются неунитарными. Резкость можно использовать для настройки качества изображения при уменьшении масштаба.
Фактор резкости влияет на форму ядра. Чем выше коэффициент резкости, тем меньше ядро.
Примечание: Это свойство влияет только на режим интерполяции куба высокого качества.
Тип — FLOAT.
Значение по умолчанию — 0,0f.
ИнтерполяцияMode
D2D1_SCALE_PROP_INTERPOLATION_MODE
Режим интерполяции, который используется эффектом для масштабирования изображения. Существует 6 режимов масштабирования, которые варьируются по качеству и скорости. Дополнительные сведения см. в разделе Режимы интерполяции .
Тип — D2D1_SCALE_INTERPOLATION_MODE.
Значение по умолчанию — D2D1_SCALE_INTERPOLATION_MODE_LINEAR.

Режимы границ

Имя Описание
D2D1_BORDER_MODE_SOFT Эффект заполняет входное изображение прозрачными черными пикселями для образцов за пределами входных границ, когда применяется ядро свертки. При этом создается мягкое ребро для изображения и в процессе выполняется расширение выходного растрового изображения на размер ядра.
D2D1_BORDER_MODE_HARD Эффект расширяет входное изображение с помощью преобразования границы зеркало типа для образцов за пределами входных границ. Размер выходного растрового рисунка равен размеру входного растрового рисунка.

`

Режимы интерполяции

Перечисление Описание
D2D1_SCALE_INTERPOLATION_MODE_NEAREST_NEIGHBOR Выборка ближайшей единственной точки и ее использование. Этот режим использует меньше времени обработки, но выводит изображение самого низкого качества.
D2D1_SCALE_INTERPOLATION_MODE_LINEAR Использует выборку из четырех точек и линейную интерполяцию. В этом режиме используется больше времени обработки, чем в режиме ближайшего соседа, но выводится изображение более высокого качества.
D2D1_SCALE_INTERPOLATION_MODE_CUBIC Использует 16 примеров кубического ядра для интерполяции. Этот режим использует больше всего времени обработки, но выводит изображение более высокого качества.
D2D1_SCALE_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR Использует 4 линейные выборки в одном пикселе для правильного сглаживания краев. Этот режим хорошо подходит для уменьшения масштаба на небольшие объемы изображений с несколькими пикселями.
D2D1_SCALE_INTERPOLATION_MODE_ANISOTROPIC Использует анизотропную фильтрацию для выборки шаблона в соответствии с преобразованной формой растрового изображения.
D2D1_SCALE_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC Использует высокое качество кубического ядра переменного размера для предварительного уменьшения масштаба изображения, если уменьшение масштаба участвует в матрице преобразования. Затем использует режим интерполяции куба для окончательного вывода.

Примечание

Если не выбрать режим, по умолчанию эффект будет D2D1_SCALE_INTERPOLATION_MODE_LINEAR.

Примечание

Анизотропный режим создает MIP-карты при масштабировании, однако если для свойства Cached задано значение true для эффектов, которые являются входными для этого эффекта, MIP-карты не будут создаваться каждый раз для достаточно небольших изображений.

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

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

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

BitmapSizex(Pixels)=Scalex*Original Bitmap Sizex (DIPs)*(UserDPI/96)
BitmapSizey(Pixels)=Scaley*Original Bitmap Sizey (DIP)*(UserDPI/96)

Эффект округляет доли пикселей до ближайшего целого пикселя.

Расположение растрового изображения — (0, 0) или значение свойства центральной точки.

Требования

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

ID2D1Effect