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


Эффект двумерного аффинного преобразования

Эффект аффинного преобразования 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 для создания квадратной матрицы. Это позволяет умножать матрицу, чтобы преобразования можно было объединить в одну матрицу.

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

Отображаемое имя и перечисление индексов Description
Интерполяция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 Эффект зажимает выходные данные к размеру входного изображения.

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

Перечисление Description
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