Convolve matrix effect
Use the convolve matrix effect to apply an arbitrary 2D kernel to an image. You can use this effect to blur, detect edges, emboss, or sharpen an image.
The CLSID for this effect is CLSID_D2D1ConvolveMatrix.
Example image
The example here shows the input and output of the convolve matrix effect with a 3 x 3 kernel.
Before |
---|
After |
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();
Effect properties
Display name and index enumeration | Description |
---|---|
KernelUnitLength D2D1_CONVOLVEMATRIX_PROP_KERNEL_UNIT_LENGTH |
The size of one unit in the kernel. The units are in (DIPs/kernel unit), where a kernel unit is the size of the element in the convolution kernel. A value of 1 (DIP/kernel unit) corresponds to one pixel in an image at 96 DPI. The type is FLOAT. The default value is 1.0f. |
ScaleMode D2D1_CONVOLVEMATRIX_PROP_SCALE_MODE |
The interpolation mode the effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed. The type is D2D1_CONVOLVEMATRIX_SCALE_MODE. The default value is D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR. |
KernelSizeX D2D1_CONVOLVEMATRIX_PROP_KERNEL_SIZE_X |
The width of the kernel matrix. The units are specified in kernel units. The type is UINT32. The default value is 3. |
KernelSizeY D2D1_CONVOLVEMATRIX_PROP_KERNEL_SIZE_Y |
The height of the kernel matrix. The units are specified in kernel units. The type is UINT32. The default value is 3. |
KernelMatrix D2D1_CONVOLVEMATRIX_PROP_KERNEL_MATRIX |
The kernel matrix to be applied to the image. The kernel elements aren't bounded and are specified as floats. The first set of KernelSizeX numbers in the FLOAT[] corresponds to the first row in the kernel. The second set of KernelSizeX numbers correspond to the second row, and so on up to KernelSizeY rows. The type is FLOAT[]. The default value is {0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f}. |
Divisor D2D1_CONVOLVEMATRIX_PROP_DIVISOR |
The kernel matrix is applied to a pixel and then the result is divided by this value. 0 behaves as a value of float epsilon. The type is FLOAT. The default value is 1.0f. |
Bias D2D1_CONVOLVEMATRIX_PROP_BIAS |
The effect applies the kernel matrix, the divisor, and then the bias is added to the result. The bias is unbounded and unitless. The type is FLOAT. The default value is 0.0f. |
KernelOffset D2D1_CONVOLVEMATRIX_PROP_KERNEL_OFFSET |
Shifts the convolution kernel from a centered position on the output pixel to a position you specify left/right and up/down. The offset is defined in kernel units. With some offsets and kernel sizes, the convolution kernel s samples won't land on a pixel image center. The pixel values for the kernel sample are computed by bilinear interpolation. The type is D2D1_VECTOR_2F. The default value is {0.0f, 0.0f}. |
PreserveAlpha D2D1_CONVOLVEMATRIX_PROP_PRESERVE_ALPHA |
Specifies whether the convolution kernel is applied to the alpha channel or only the color channels. If you set this to TRUE the convolution kernel is applied only to the color channels. If you set this to FALSE the convolution kernel is applied to all channels. The type is BOOL. The default value is FALSE. |
BorderMode D2D1_CONVOLVEMATRIX_PROP_BORDER_MODE |
The mode used to calculate the border of the image, soft or hard. See Border modes for more info. The type is D2D1_BORDER_MODE. The default value is D2D1_BORDER_MODE_SOFT. |
ClampOutput D2D1_CONVOLVEMATRIX_PROP_CLAMP_OUTPUT |
Whether the effect clamps color values to between 0 and 1 before the effect passes the values to the next effect in the graph. The effect clamps the values before it premultiplies the alpha . If you set this to TRUE the effect will clamp the values. If you set this to FALSE, the effect will not clamp the color values, but other effects and the output surface may clamp the values if they are not of high enough precision. The type is BOOL. The default value is FALSE. |
Scale modes
Enumeration | Description |
---|---|
D2D1_CONVOLVEMATRIX_SCALE_MODE_NEAREST_NEIGHBOR | Samples the nearest single point and uses that. This mode uses less processing time, but outputs the lowest quality image. |
D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR | Uses a four point sample and linear interpolation. This mode outputs a higher quality image than nearest neighbor mode. |
D2D1_CONVOLVEMATRIX_SCALE_MODE_CUBIC | Uses a 16 sample cubic kernel for interpolation. This mode uses the most processing time, but outputs a higher quality image. |
D2D1_CONVOLVEMATRIX_SCALE_MODE_MULTI_SAMPLE_LINEAR | Uses 4 linear samples within a single pixel for good edge anti-aliasing. This mode is good for scaling down by small amounts on images with few pixels. |
D2D1_CONVOLVEMATRIX_SCALE_MODE_ANISOTROPIC | Uses anisotropic filtering to sample a pattern according to the transformed shape of the bitmap. |
D2D1_CONVOLVEMATRIX_SCALE_MODE_HIGH_QUALITY_CUBIC | Uses a variable size high quality cubic kernel to perform a pre-downscale the image if downscaling is involved in the transform matrix. Then uses the cubic interpolation mode for the final output. |
Note
If you don't select a mode, the effect defaults to D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR.
Border modes
Name | Description |
---|---|
D2D1_BORDER_MODE_SOFT | The effect pads the input image with transparent black pixels for samples outside of the input bounds when it applies the convolution kernel. This creates a soft edge for the image, and in the process expands the output bitmap by the size of the kernel. |
D2D1_BORDER_MODE_HARD | The effect extends the input image with a mirror-type border transform for samples outside of the input bounds. The size of the output bitmap is equal to the size of the input bitmap. |
Output bitmap
The size of the effect's output depends on the size of the convolution kernel, the kernel offset, the kernel unit length, and the border mode setting.
Requirements
Requirement | Value |
---|---|
Minimum supported client | Windows 8 and Platform Update for Windows 7 [desktop apps | Windows Store apps] |
Minimum supported server | Windows 8 and Platform Update for Windows 7 [desktop apps | Windows Store apps] |
Header | d2d1effects.h |
Library | d2d1.lib, dxguid.lib |