Эффект двумерного аффинного преобразования
Эффект аффинного преобразования 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 |