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


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

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

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, unitless и должны быть положительными или 0.
Тип D2D1_VECTOR_2F.
Значение по умолчанию — {1.0f, 1.0f}.
CenterPoint
D2D1_SCALE_PROP_CENTER_POINT
Точка центра масштабирования изображения. Это свойство определяется как D2D1_VECTOR_2F (точка X, точка Y). Единицы находятся в dips.
Используйте свойство центра для масштабирования вокруг точки, отличной от левого верхнего угла.
Тип 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-карты при масштабировании, однако если при масштабировании свойство кэшированного кэшированного задано значение true для эффектов, входных в этот эффект, mipmaps не будет создаваться каждый раз для достаточно небольших изображений.

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

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

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

BitmapSizex(Пиксели)=Scalex*Original Bitmap Sizex (DIPs)*(UserDPI/96)
BitmapSizey(пиксели)=Scaley*Original Bitmap Sizey (DIPs)*(UserDPI/96)

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

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

Требования

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

ID2D1Effect