缩放效果

使用此效果可纵向扩展或缩减图像。 该效果有六种缩放模式:最近邻、线性、立方、多样本线性、各向异性和高质量立方。

此效果的 CLSID 是CLSID_D2D1Scale。

示例图

此示例演示缩放效果放大到输入的 2 倍,并裁剪为原始大小。

以前
效果前的图像。
之后
转换后的图像。
ComPtr<ID2D1Effect> scaleEffect;
m_d2dContext->CreateEffect(CLSID_D2D1Scale, &scaleEffect);

scaleEffect->SetInput(0, bitmap);

scaleEffect->SetValue(D2D1_SCALE_PROP_CENTER_POINT, D2D1::Vector2F(256.0f, 192.0f));
scaleEffect->SetValue(D2D1_SCALE_PROP_SCALE, D2D1::Vector2F(2.0f, 2.0f));

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

效果属性

显示名称和索引枚举 说明
缩放
D2D1_SCALE_PROP_SCALE
X 和 Y 方向的缩放量,作为输出大小与输入大小的比率。 此属性D2D1_VECTOR_2Fdefined为: (X 刻度、Y 缩放) 。 刻度量为 FLOAT、无单位,必须为正或 0。
类型为D2D1_VECTOR_2F。
默认值为 {1.0f, 1.0f}。
CenterPoint
D2D1_SCALE_PROP_CENTER_POINT
图像缩放中心点。 此属性是一个D2D1_VECTOR_2F,定义为: (点 X,点 Y) 。 这些单位以 DIP 为单位。
使用中心点属性可围绕左上角以外的某个点进行缩放。
类型为D2D1_VECTOR_2F。
默认值为 {0.0f, 0.0f}。
BorderMode
D2D1_SCALE_PROP_BORDER_MODE
用于计算图像边框(软或硬)的模式。 有关详细信息,请参阅 边框模式
类型为D2D1_BORDER_MODE。
默认值为 D2D1_BORDER_MODE_SOFT。
Sharpness
D2D1_SCALE_PROP_SHARPNESS
在高质量立方内插模式下,缩放筛选器的锐度级别为 0 到 1 之间的浮点。 这些值是无单位的。 缩小图像时,可以使用锐度调整图像的质量。
锐度因素会影响内核的形状。 锐度因子越高,内核越小。
注意: 此属性仅影响高质量的立方内插模式。
类型为 FLOAT。
默认值为 0.0f。
InterpolationMode
D2D1_SCALE_PROP_INTERPOLATION_MODE
效果用于缩放图像的内插模式。 有 6 种缩放模式,在质量和速度方面都有范围。 有关详细信息 ,请参阅内插模式
类型为D2D1_SCALE_INTERPOLATION_MODE。
默认值为 D2D1_SCALE_INTERPOLATION_MODE_LINEAR。

边框模式

名称 描述
D2D1_BORDER_MODE_SOFT 该效果在应用卷积内核时,使用透明黑色像素填充输入图像,以获取输入边界外的样本。 这会为图像创建一个软边缘,并在过程中按内核的大小扩展输出位图。
D2D1_BORDER_MODE_HARD 该效果通过输入边界之外的样本镜像类型边框转换来扩展输入图像。 输出位图的大小等于输入位图的大小。

`

内插模式

枚举 描述
D2D1_SCALE_INTERPOLATION_MODE_NEAREST_NEIGHBOR 对最近的单个点进行采样并使用它。 此模式使用的处理时间较少,但输出质量最低的图像。
D2D1_SCALE_INTERPOLATION_MODE_LINEAR 使用四点样本和线性内插。 此模式使用的处理时间比最近的邻居模式多,但输出更高质量的图像。
D2D1_SCALE_INTERPOLATION_MODE_CUBIC 使用 16 个示例立方内核进行内插。 此模式使用的处理时间最多,但会输出更高质量的图像。
D2D1_SCALE_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR 在单个像素内使用 4 个线性样本,以便进行良好的边缘抗锯齿。 此模式适用于在像素较少的图像上按少量纵向缩减。
D2D1_SCALE_INTERPOLATION_MODE_ANISOTROPIC 使用各向异性筛选根据位图的转换形状对图案进行采样。
D2D1_SCALE_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC 如果转换矩阵中涉及降级,则使用可变大小的高质量立方内核对图像执行预缩减。 然后将三次内插模式用于最终输出。

备注

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

备注

各向异性模式在缩放时生成 mipmap,但是,如果在输入到此效果的效果上将 Cached 属性设置为 true,则不会每次为足够小的图像生成 mipmap。

输出位图

输出位图的位置和大小取决于指定的比例系数和中心点。

可以使用以下公式计算输出位图的大小:

BitmapSizex (像素) =Scalex*Original Bitmap Sizex (DIP) * (UserDPI/96)
BitmapSizey (像素) =Scaley*原始位图大小y (DIP) * (UserDPI/96)

该效果将像素的分数向上舍入到最接近的整个像素。

位图的位置 (0, 0) 或中心点属性的值。

要求

要求
最低受支持的客户端 适用于 Windows 7 的 Windows 8 和平台更新 [桌面应用 |Windows 应用商店应用]
最低受支持的服务器 适用于 Windows 7 的 Windows 8 和平台更新 [桌面应用 |Windows 应用商店应用]
标头 d2d1effects.h
d2d1.lib、dxguid.lib

ID2D1Effect