You can use this effect to output a portion of an image but retain the region outside of the portion for use in subsequent operations.
The CLSID for this effect is CLSID_D2D1Atlas.
The atlas effect is useful if you want to load a large image made up of many smaller images, such as various frames of a sprite.
To create the output the effect:
Crops the input to the given InputRect property.
Translates the origin of the result to (0,0).
Note
The InputPaddingRect property should only be larger if and only if the pixels between the two rectangles are transparent black on the input. This may result in Direct2D executing the graph more optimally.
Here is an example of the effect. This image is small and simple for illustration purposes.
The preceding image is the input to the effect. The code here creates an atlas effect, sets the input, sets the input rectangle, and then draws the output.
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());
The preceding code selects a rectangle that is around the second triangle. The padding around it is ignored. Here is the resulting image.
Note
This is a situation where you may choose to specify a InputPaddingRect because the padding is transparent black. The rectangle would be D2D1::Vector4F(size + (padding * 2), 0, size + padding, size + padding);.
Effect properties
Display name and index enumeration
Description
InputRect D2D1_ATLAS_PROP_INPUT_RECT
The portion of the image passed to the next effect. Type is D2D1_VECTOR_4F. Default value is (-FLT_MAX, -FLT_MAX, FLT_MAX, FLT_MAX).