Atlas 效果
可以使用此效果输出图像的一部分,但保留该部分之外的区域以供后续操作使用。
此效果的 CLSID 是CLSID_D2D1Atlas。
如果要加载由许多较小图像组成的大图像,例如子画面的各种帧,则 atlas 效果非常有用。
若要创建输出效果,请:
- 将输入裁剪到给定的 InputRect 属性。
- 将结果的原点转换为 (0,0) 。
注意
仅当并且仅当两个矩形之间的像素在输入上为透明黑色时, InputPaddingRect 属性才应更大。 这可能会导致 Direct2D 更优化地执行图形。
下面是效果的示例。 此图像小而简单,用于说明目的。
上图是效果的输入。 此处的代码创建图集效果、设置输入、设置输入矩形,然后绘制输出。
ComPtr<ID2D1Effect> atlasEffect;
// Create the Atlas Effect.
DX::ThrowIfFailed(m_d2dContext->CreateEffect(CLSID_D2D1Atlas, &atlasEffect));
// Set the input.
atlasEffect->SetInputEffect(0, inputImage.Get());
// The images here are 150 x 150 pixels.
float size = 150.0f;
// Compensate for the padding between images.
float padding = 10.0f;
// The input rectangle. 150 x 150 pixels with 10 pixel padding
D2D1_Vector_4F inputRect = D2D1::Vector4F(size + (padding * 2), padding, size, size);
DX::ThrowIfFailed(atlasEffect->SetValue(D2D1_ATLAS_PROP_INPUT_RECT, inputRect));
// Draw the image
m_d2dContext->DrawImage(atlasEffect.Get());
前面的代码选择围绕第二个三角形的矩形。 忽略它周围的填充。 下面是生成的图像。
注意
在这种情况下,你可以选择指定 InputPaddingRect ,因为填充是透明的黑色。 矩形为 D2D1::Vector4F(size + (padding * 2), 0, size + padding, size + padding);
。
效果属性
显示名称和索引枚举 | 说明 |
---|---|
InputRect D2D1_ATLAS_PROP_INPUT_RECT |
传递给下一个效果的图像部分。 类型为D2D1_VECTOR_4F。 默认值为 (-FLT_MAX、-FLT_MAX、FLT_MAX FLT_MAX) 。 |
InputPaddingRect D2D1_ATLAS_PROP_INPUT_PADDING_RECT |
为输出矩形采样的最大大小。 类型为D2D1_VECTOR_4F。 默认值为 (-FLT_MAX、-FLT_MAX、FLT_MAX FLT_MAX) 。 |
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 适用于 Windows 7 的Windows 8和平台更新 [桌面应用 |Windows 应用商店应用] |
最低受支持的服务器 | 适用于 Windows 7 的Windows 8和平台更新 [桌面应用 |Windows 应用商店应用] |
标头 | d2d1effects.h |
库 | d2d1.lib、dxguid.lib |