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


Эффект свертки матрицы

Используйте эффект сверток матрицы для применения произвольного 2D-ядра к изображению. Этот эффект можно использовать для размытия, обнаружения краев, emboss или резкого изображения.

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

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

В примере ниже показаны входные и выходные данные эффекта сверток матрицы с ядром 3 x 3.

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

convolveMatrixEffect->SetInput(0, bitmap);
float matrix[9] = {-1, -1, -1, -1, 9, -1, -1, -1, -1};
convolveMatrixEffect->SetValue(D2D1_CONVOLVEMATRIX_PROP_KERNEL_MATRIX, matrix);

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

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

Отображаемое имя и перечисление индексов Description
KernelUnitLength
D2D1_CONVOLVEMATRIX_PROP_KERNEL_UNIT_LENGTH
Размер одной единицы в ядре. Единицы находятся в (diPs/ядро), где единица ядра — это размер элемента в ядре свертки. Значение 1 (единица DIP/ядра) соответствует одному пикселю на изображении с 96 DPI.
Тип FLOAT.
Значение по умолчанию — 1.0f.
Scalemode
D2D1_CONVOLVEMATRIX_PROP_SCALE_MODE
Режим интерполяции, который используется для масштабирования изображения до соответствующей длины единицы ядра. Существует шесть режимов масштабирования, которые отличаются качеством и скоростью.
Тип D2D1_CONVOLVEMATRIX_SCALE_MODE.
Значение по умолчанию — D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR.
KernelSizeX
D2D1_CONVOLVEMATRIX_PROP_KERNEL_SIZE_X
Ширина матрицы ядра. Единицы указываются в единицах ядра. Тип — UINT32.
Значение по умолчанию равно 3.
ЯдроSizey
D2D1_CONVOLVEMATRIX_PROP_KERNEL_SIZE_Y
Высота матрицы ядра. Единицы указываются в единицах ядра. Тип — UINT32.
Значение по умолчанию равно 3.
KernelMatrix
D2D1_CONVOLVEMATRIX_PROP_KERNEL_MATRIX
Матрица ядра, применяемая к изображению. Элементы ядра не привязаны и указываются в виде с плавающей запятой.
Первый набор чисел KernelSizeX в FLOAT[] соответствует первой строке в ядре. Второй набор чисел KernelSizeX соответствует второй строке и т. д. до строк KernelSizeY .
Тип FLOAT[].
Значение по умолчанию — {0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f}.
Делитель
D2D1_CONVOLVEMATRIX_PROP_DIVISOR
Матрица ядра применяется к пикселю, а затем результат делится на это значение.
0 ведет себя как значение float epsilon.
Тип FLOAT.
Значение по умолчанию — 1.0f.
Предвзятости
D2D1_CONVOLVEMATRIX_PROP_BIAS
Эффект применяет матрицу ядра, делитель, а затем смещение добавляется к результату. Предвзятость не связана и неуправляема. Тип FLOAT.
Значение по умолчанию — 0.0f.
ЯдроOffset
D2D1_CONVOLVEMATRIX_PROP_KERNEL_OFFSET
Перемещает ядро свертки из центрированного положения в выходной пиксель в положение, указываемое слева или вправо и вниз. Смещение определяется в единицах ядра.
При некоторых смещениях и размерах ядра образцы ядра сверток не будут приземляться в центре изображения пикселей. Значения пикселей для образца ядра вычисляются двулинейной интерполяцией.
Тип D2D1_VECTOR_2F.
Значение по умолчанию — {0.0f, 0.0f}.
СохранитьAlpha
D2D1_CONVOLVEMATRIX_PROP_PRESERVE_ALPHA
Указывает, применяется ли ядро свертки к альфа-каналу или только цветным каналам.
Если задать значение TRUE , ядро свертки применяется только к цветным каналам.
Если задано значение FALSE , ядро свертки применяется ко всем каналам.
Тип — BOOL.
Значение по умолчанию — FALSE.
BorderMode
D2D1_CONVOLVEMATRIX_PROP_BORDER_MODE
Режим, используемый для вычисления границы изображения, мягкого или жесткого. Дополнительные сведения см . в режимах границы.
Тип D2D1_BORDER_MODE.
Значение по умолчанию — D2D1_BORDER_MODE_SOFT.
ClampOutput
D2D1_CONVOLVEMATRIX_PROP_CLAMP_OUTPUT
Если эффект зажимает значения цвета в диапазоне от 0 до 1, прежде чем эффект передает значения следующему эффекту в графе. Эффект зажимает значения перед тем, как он премультирует альфа- .
Если задано значение TRUE, эффект зацепнет значения. Если задано значение FALSE, эффект не зацепляет значения цвета, но другие эффекты и выходная поверхность могут зажать значения, если они не имеют достаточной точности.
Тип — BOOL.
Значение по умолчанию — FALSE.

Режимы масштабирования

Перечисление Description
D2D1_CONVOLVEMATRIX_SCALE_MODE_NEAREST_NEIGHBOR Примеры ближайшей единой точки и используют ее. В этом режиме используется меньше времени обработки, но выводится изображение с наименьшим качеством.
D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR Использует четырехточечный образец и линейную интерполяцию. Этот режим выводит изображение более высокого качества, чем ближайший режим соседа.
D2D1_CONVOLVEMATRIX_SCALE_MODE_CUBIC Использует 16 примеров кубового ядра для интерполяции. В этом режиме используется максимальное время обработки, но выводится более качественный образ.
D2D1_CONVOLVEMATRIX_SCALE_MODE_MULTI_SAMPLE_LINEAR Использует 4 линейных выборки в одном пикселе для хорошего анти-псевдонима края. Этот режим подходит для масштабирования на небольшие объемы на изображениях с несколькими пикселями.
D2D1_CONVOLVEMATRIX_SCALE_MODE_ANISOTROPIC Использует анисотропную фильтрацию для выборки шаблона в соответствии с преобразованной формой растрового изображения.
D2D1_CONVOLVEMATRIX_SCALE_MODE_HIGH_QUALITY_CUBIC Использует размер переменной с высоким качеством кубическом ядре для предварительного масштабирования изображения, если уменьшение масштаба участвует в матрице преобразования. Затем используется режим интерполяции кубов для конечных выходных данных.

Примечание.

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

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

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

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

Размер выходных данных эффекта зависит от размера ядра свертки, смещения ядра, длины единицы ядра и параметра режима границы.

Требования

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

ID2D1Effect