卷积矩阵效果

使用卷积矩阵效果将任意 2D 内核应用于图像。 可以使用此效果模糊、检测边缘、浮雕或锐化图像。

此效果的 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
内核中一个单元的大小。 这些单元位于(DIP/内核单元),其中内核单元是卷积内核中元素的大小。 值为 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。
KernelSizeY
D2D1_CONVOLVEMATRIX_PROP_KERNEL_SIZE_Y
内核矩阵的高度。 这些单元在内核单元中指定。 类型为 UINT32。
默认值为 3。
KernelMatrix
D2D1_CONVOLVEMATRIX_PROP_KERNEL_MATRIX
要应用于映像的内核矩阵。 内核元素未绑定,并指定为浮点。
FLOAT[] 中的第一组 KernelSizeX 数字对应于内核中的第一行。 第二组 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。
KernelOffset
D2D1_CONVOLVEMATRIX_PROP_KERNEL_OFFSET
将卷积内核从输出像素上的居中位置移动到指定向左/右和向上/向下的位置。 偏移量在内核单元中定义。
由于存在一些偏移量和内核大小,卷积内核的样本不会降落在像素图像中心。 内核样本的像素值由双线性内插计算。
类型为D2D1_VECTOR_2F。
默认值为 {0.0f, 0.0f}。
PreserveAlpha
D2D1_CONVOLVEMATRIX_PROP_PRESERVE_ALPHA
指定卷积内核是应用于 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 之间。 效果在预乘 alpha 之前固定值。
如果将此值设置为 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 7 的 Windows 8 和平台更新 [桌面应用 |Windows 应用商店应用]
支持的最低服务器 适用于 Windows 7 的 Windows 8 和平台更新 [桌面应用 |Windows 应用商店应用]
页眉 d2d1effects.h
图书馆 d2d1.lib、dxguid.lib

ID2D1Effect