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


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

Используйте эффект сверток матрицы для применения произвольного 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();

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

Отображаемое имя и перечисление индексов Описание
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 соответствует второй строке и т. д. до строк ЯдраSizeY.
Тип 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.

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

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