Convolve 矩阵效果

使用卷积矩阵效果将任意 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 作为浮点 epsilon 的值。
类型为 FLOAT。
默认值为 1.0f。
Bias
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 8 和适用于 Windows 7 的平台更新 [桌面应用| Windows 应用商店应用]
支持的最低服务器版本 Windows 8 和适用于 Windows 7 的平台更新 [桌面应用| Windows 应用商店应用]
头文件 d2d1effects.h
d2d1.lib、dxguid.lib

ID2D1Effect