2D 仿射转换效果

2D 相交转换效果使用 Direct2D 矩阵 转换 和六种内插模式中的任何一种,基于 3X2 矩阵对图像应用空间转换。 可以使用此效果旋转、缩放、倾斜或转换图像。 或者,可以合并这些作。 Affine 传输将保留平行线和图像中任意三个点之间的距离比率。

此效果的 CLSID CLSID_D2D12DAffineTransform。

示例图像

以前
在效果之前 图像。
转换后 图像。
ComPtr<ID2D1Effect> affineTransformEffect;
m_d2dContext->CreateEffect(CLSID_D2D12DAffineTransform, &affineTransformEffect);

affineTransformEffect->SetInput(0, bitmap);

D2D1_MATRIX_3X2_F matrix = D2D1::Matrix3x2F(0.9f, -0.1f,   0.1f, 0.9f,   8.0f, 45.0f);

affineTransformEffect->SetValue(D2D1_2DAFFINETRANSFORM_PROP_TRANSFORM_MATRIX, matrix);

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

此效果执行此矩阵作:

相仿矩阵运算

尽管输入矩阵定义为 3x2 矩阵,但最后一列填充 0、0 和 1 以生成正方形矩阵。 这允许矩阵乘法,以便可以将转换串联成单个矩阵。

效果属性

显示名称和索引枚举 描述
InterpolationMode
D2D1_2DAFFINETRANSFORM_PROP_INTERPOLATION_MODE
用于缩放图像的内插模式。 有 6 种缩放模式在质量和速度范围内。
类型为D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE。
默认值为D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR。
BorderMode
D2D1_2DAFFINETRANSFORM_PROP_BORDER_MODE
用于计算图像边框、软边框或硬边框的模式。 有关详细信息,请参阅 边框模式
类型为D2D1_BORDER_MODE。
默认值为D2D1_BORDER_MODE_SOFT。
TransformMatrix
D2D1_2DAFFINETRANSFORM_PROP_TRANSFORM_MATRIX
使用 Direct2D 矩阵转换图像的 3x2 矩阵 转换
类型为D2D1_MATRIX_3X2_F。
默认值为 Matrix3x2F::Identity()。
清晰度
D2D1_2DAFFINETRANSFORM_PROP_SHARPNESS
在高质量的立方内插模式下,缩放筛选器的锐度级别为介于 0 和 1 之间的浮点数。 这些值是无单位的。 缩放图像时,可以使用锐度调整图像的质量。
锐度因子会影响内核的形状。 锐度系数越高,内核越小。
注意: 此属性仅影响高质量的立方内插模式。
类型为 FLOAT。
默认值为 0.0f。

边框模式

名字 描述
D2D1_BORDER_MODE_SOFT 该效果在内插时使用透明黑色像素填充图像,从而导致软边缘。
D2D1_BORDER_MODE_HARD 该效果将输出固定到输入图像的大小。

内插模式

列举 描述
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_NEAREST_NEIGHBOR 对最近的单一点进行采样,并使用它。 此模式使用较少的处理时间,但输出质量最低的图像。
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR 使用四点样本和线性内插。 此模式使用的处理时间比最接近的邻居模式多,但输出质量更高的图像。
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_CUBIC 使用 16 个样本立方内核进行内插。 此模式使用最多的处理时间,但输出质量更高的图像。
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR 使用单个像素中的 4 个线性样本进行良好的边缘抗锯齿。 此模式适用于在图像上以少量像素进行缩减。
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_ANISOTROPIC 使用异性筛选根据位图的转换形状对模式采样。
D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC 使用可变大小的高质量立方内核在转换矩阵中涉及向下缩放时执行图像的预缩放。 然后将立方内插模式用于最终输出。

注意

如果未选择模式,效果默认为D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR。

注意

但是,缩放时,异性模式在缩放时会生成 mipmap,但是,如果将 Cached 属性设置为 true,则每次为足够小的图像生成 mipmaps。

输出位图

输出位图的大小取决于应用于图像的转换矩阵。

该效果执行转换作,然后对结果应用边界框。 输出位图是边界框的大小。

要求

要求 价值
支持的最低客户端 适用于 Windows 7 的 Windows 8 和平台更新 [桌面应用 |Windows 应用商店应用]
支持的最低服务器 适用于 Windows 7 的 Windows 8 和平台更新 [桌面应用 |Windows 应用商店应用]
页眉 d2d1effects.h
图书馆 d2d1.lib、dxguid.lib

ID2D1Effect