Comment utiliser une image bitmap comme masque d’opacité
Cette rubrique explique comment utiliser une image bitmap comme masque d’opacité grâce à la méthode ID2D1Factory::FillOpacityMask. Le masque d’opacité est une image bitmap qui fournit les informations de couverture représentées par le canal alpha, qui contrôle la transparence du contenu affiché. Cette approche est plus efficace que l’utilisation de couches avec un masque d’opacité. Pour plus d'informations, consultez la Vue d’ensemble des couches.
Pour découper une région
- Chargez l’image bitmap d’origine à partir d’une ressource. Pour plus d’informations sur la façon de charger une image bitmap, consultez Comment charger une image bitmap à partir d’une ressource.
- Chargez le masque d’image bitmap d’origine à partir d’une ressource.
- Créez un pinceau d’image bitmap avec l’image bitmap d’origine. Pour plus d’informations sur la création d’un pinceau d’image bitmap, consultez Comment créer un pinceau bitmap.
- Appelez ID2D1Factory::SetAntialiasMode pour définir le mode antialias sur la cible de rendu sur D2D1_ANTIALIAS_MODE_ALIASED pour garantir le fonctionnement de ID2D1Factory::FillOpacityMask.
- Appelez FillOpacityMask avec le masque d’image bitmap et le pinceau d’image bitmap sur la cible de rendu pour remplir le clip.
L’illustration suivante montre l’image bitmap d’origine à gauche, le masque d’image bitmap dans le centre et l’image bitmap tronquée sur le masque de droite.
Le code suivant montre comment découper la région avec le masque affiché dans l’illustration précédente. Il charge d’abord l’image bitmap d’origine et le masque d’image bitmap. Il crée ensuite un pinceau d’image bitmap à partir de l’image bitmap d’origine.
// Create the bitmap to be used by the bitmap brush
if (SUCCEEDED(hr))
{
hr = LoadResourceBitmap(
m_pRenderTarget,
m_pWICFactory,
L"GoldFish",
L"Image",
&m_pOrigBitmap
);
}
if (SUCCEEDED(hr))
{
hr = LoadResourceBitmap(
m_pRenderTarget,
m_pWICFactory,
L"GoldFishMask",
L"Image",
&m_pBitmapMask
);
}
if (SUCCEEDED(hr))
{
D2D1_BITMAP_BRUSH_PROPERTIES propertiesXClampYClamp = D2D1::BitmapBrushProperties(
D2D1_EXTEND_MODE_CLAMP,
D2D1_EXTEND_MODE_CLAMP,
D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR
);
hr = m_pRenderTarget->CreateBitmapBrush(
m_pOrigBitmap,
propertiesXClampYClamp,
&m_pOriginalBitmapBrush
);
if (SUCCEEDED(hr))
{
hr = m_pRenderTarget->CreateBitmapBrush(
m_pBitmapMask,
propertiesXClampYClamp,
&m_pBitmapMaskBrush
);
}
}
Il appelle ensuite SetAntialiasMode pour définir le mode antialias. Appelez FillOpacityMask pour utiliser un masque bitmap permettant de découper l’image bitmap d’origine.
// D2D1_ANTIALIAS_MODE_ALIASED must be set for FillOpacityMask
// to function properly.
m_pRenderTarget->SetAntialiasMode(D2D1_ANTIALIAS_MODE_ALIASED);
m_pRenderTarget->FillOpacityMask(
m_pBitmapMask,
m_pOriginalBitmapBrush,
D2D1_OPACITY_MASK_CONTENT_GRAPHICS,
&rcBrushRect,
NULL
);
m_pRenderTarget->SetAntialiasMode(D2D1_ANTIALIAS_MODE_PER_PRIMITIVE);
Pour plus d’informations sur les masques d’opacité, consultez la vue d’ensemble des masques d’opacité.
Rubriques connexes