缩放效果
使用此效果可纵向扩展或缩减图像。 效果有六种缩放模式:最接近的邻居、线性、立方体、多样本线性、异质和高质量立方体。
此效果的 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 |
图像缩放中心点。 此属性是定义为:(point X,point Y)的D2D1_VECTOR_2F。 这些单位以 DIP 为单位。 使用中心点属性可围绕左上角以外的某个点进行缩放。 类型为D2D1_VECTOR_2F。 默认值为 {0.0f, 0.0f}。 |
BorderMode D2D1_SCALE_PROP_BORDER_MODE |
用于计算图像边框、软边框或硬边框的模式。 有关详细信息,请参阅 边框模式。 类型为D2D1_BORDER_MODE。 默认值为D2D1_BORDER_MODE_SOFT。 |
清晰度 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,则每次为足够小的图像生成 mipmaps。
输出位图
输出位图的位置和大小取决于指定的刻度因子和中心点。
可以使用以下公式计算输出位图的大小:
- BitmapSizex(Pixels)=Scalex*Original Bitmap Sizex*(UserDPI/96)
BitmapSizey(Pixel)=Scaley*Original Bitmap Sizey (DIPs)*(UserDPI/96)
效果将像素的分数向上舍入到最接近的整个像素。
位图的位置为 (0, 0) 或中心点属性的值。
要求
要求 | 价值 |
---|---|
支持的最低客户端 | 适用于 Windows 7 的 Windows 8 和平台更新 [桌面应用 |Windows 应用商店应用] |
支持的最低服务器 | 适用于 Windows 7 的 Windows 8 和平台更新 [桌面应用 |Windows 应用商店应用] |
页眉 | d2d1effects.h |
图书馆 | d2d1.lib、dxguid.lib |