问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Direct2D中的2D仿射转换效果详解

创作时间:
作者:
@小白创作中心

Direct2D中的2D仿射转换效果详解

引用
1
来源
1.
https://learn.microsoft.com/zh-cn/windows/win32/direct2d/2d-affine-transform

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

此效果的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
用于缩放图像的内插模式。有6种缩放模式在质量和速度范围内。类型为D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE。默认值为D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR。
BorderMode
用于计算图像边框、软边框或硬边框的模式。有关详细信息,请参阅边框模式。类型为D2D1_BORDER_MODE。默认值为D2D1_BORDER_MODE_SOFT。
TransformMatrix
使用Direct2D矩阵转换图像的3x2矩阵转换。类型为D2D1_MATRIX_3X2_F。默认值为Matrix3x2F::Identity()。
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 7的Windows 8和平台更新[桌面应用
页眉
d2d1effects.h
图书馆
d2d1.lib、dxguid.lib

本文原文来自微软官方文档。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号