Como usar um bitmap como uma máscara de opacidade
Este tópico descreve como usar um bitmap como uma máscara de opacidade chamando o método ID2D1Factory::FillOpacityMask. A máscara de opacidade é um bitmap que fornece as informações de cobertura representadas pelo canal alfa, que controla a transparência do conteúdo renderizado. Essa abordagem é mais eficiente do que usar camadas com uma máscara de opacidade. Para obter mais informações, consulte Visão geral de camadas.
Para recortar uma região
- Carregue o bitmap original de um recurso. Para obter informações sobre como carregar um bitmap, consulte Como carregar um bitmap de um recurso.
- Carregue a máscara de bitmap de um recurso.
- Crie um pincel de bitmap com o bitmap original. Para obter informações sobre como criar um pincel de bitmap, consulte Como criar um pincel de bitmap.
- Chame ID2D1Factory::SetAntialiasMode para definir o modo de suavização no destino de renderização para D2D1_ANTIALIAS_MODE_ALIASED para ID2D1Factory::FillOpacityMask funcionar.
- Chame FillOpacityMask com a máscara de bitmap e o pincel de bitmap no destino de renderização para preencher o clipe.
A ilustração a seguir mostra o bitmap original à esquerda, a máscara de bitmap no centro e o bitmap cortado para a máscara à direita.
O código a seguir mostra como cortar a região com a máscara mostrada na ilustração anterior. Ele primeiro carrega o bitmap original e a máscara de bitmap. E, em seguida, cria um pincel de bitmap com o bitmap original.
// 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
);
}
}
Em seguida, ele chama SetAntialiasMode para definir o modo de suavização. Chame FillOpacityMask para usar uma máscara de bitmap para cortar o bitmap original.
// 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);
Para obter mais informações sobre máscaras de opacidade, consulte a Visão geral de máscaras de opacidade.
Tópicos relacionados