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


Эффект преобразования 2D

Эффект аффинного преобразования 2D применяет пространственное преобразование к изображению на основе матрицы 3X2 с помощью матрицы Direct2D преобразования и любого из шести режимов интерполяции. Этот эффект можно использовать для поворота, масштабирования, перекоса или перевода изображения. Кроме того, эти операции можно объединить. Аффинные передачи сохраняют параллельные линии и соотношение расстояний между тремя точками на изображении.

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

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

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

affineTransformEffect->SetInput(0, bitmap);

D2D1_MATRIX_3X2_F matrix = D2D1::Matrix3x2F(0.9f, -0.1f,   0.1f, 0.9f,   8.0f, 45.0f);

affineTransformEffect->SetValue(D2D1_2DAFFINETRANSFORM_PROP_TRANSFORM_MATRIX, matrix);

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

Этот эффект выполняет эту матричную операцию:

аффинной матрицы

Хотя входная матрица определена как матрица 3x2, последний столбец заполняется 0, 0 и 1 для создания квадратной матрицы. Это позволяет умножать матрицу, чтобы преобразования можно было объединить в одну матрицу.

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

Отображаемое имя и перечисление индексов Описание
ИнтерполяцияMode
D2D1_2DAFFINETRANSFORM_PROP_INTERPOLATION_MODE
Режим интерполяции, используемый для масштабирования изображения. Существует 6 режимов масштабирования, которые отличаются качеством и скоростью.
Тип D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE.
Значение по умолчанию — D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR.
BorderMode
D2D1_2DAFFINETRANSFORM_PROP_BORDER_MODE
Режим, используемый для вычисления границы изображения, мягкого или жесткого. Дополнительные сведения см. в режимах границ.
Тип D2D1_BORDER_MODE.
Значение по умолчанию — D2D1_BORDER_MODE_SOFT.
ПреобразованиеMatrix
D2D1_2DAFFINETRANSFORM_PROP_TRANSFORM_MATRIX
Матрица 3x2 для преобразования изображения с помощью матрицы Direct2D преобразования.
Тип D2D1_MATRIX_3X2_F.
Значением по умолчанию является Matrix3x2F::Identity().
Резкость
D2D1_2DAFFINETRANSFORM_PROP_SHARPNESS
В режиме высококачественной интерполяции кубической интерполяции уровень резкости фильтра масштабирования в диапазоне от 0 до 1. Значения являются безудельными. Вы можете использовать резкость для настройки качества изображения при масштабировании изображения.
Коэффициент резкости влияет на форму ядра. Чем выше коэффициент резкости, тем меньше ядро.
Примечание. это свойство влияет только на режим интерполяции с высоким качеством.
Тип FLOAT.
Значение по умолчанию — 0.0f.

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

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

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

Перечисление Описание
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_NEAREST_NEIGHBOR Примеры ближайшей единой точки и используют ее. В этом режиме используется меньше времени обработки, но выводится изображение с наименьшим качеством.
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR Использует четырехточечный образец и линейную интерполяцию. В этом режиме используется больше времени обработки, чем в ближайшем соседнем режиме, но выводится более качественный образ.
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_CUBIC Использует 16 примеров кубового ядра для интерполяции. В этом режиме используется максимальное время обработки, но выводится более качественный образ.
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR Использует 4 линейных выборки в одном пикселе для хорошего анти-псевдонима края. Этот режим подходит для масштабирования на небольшие объемы на изображениях с несколькими пикселями.
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_ANISOTROPIC Использует анисотропную фильтрацию для выборки шаблона в соответствии с преобразованной формой растрового изображения.
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC Использует размер переменной с высоким качеством кубическом ядре для предварительного масштабирования изображения, если уменьшение масштаба участвует в матрице преобразования. Затем используется режим интерполяции кубов для конечных выходных данных.

Заметка

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

Заметка

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

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

Размер выходного растрового изображения зависит от матрицы преобразования, применяемой к изображению.

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

Требования

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

ID2D1Effect