Come usare una bitmap come maschera di Opacità
In questo argomento viene descritto come usare una bitmap come maschera di opacità chiamando il metodo ID2D1Factory::FillOpacityMask. La maschera di opacità è una bitmap che fornisce le informazioni di copertura rappresentate dal canale alfa, che controlla la trasparenza del contenuto di cui viene eseguito il rendering. Questo approccio è più efficiente rispetto all'uso dei livelli con una maschera di opacità. Per altre informazioni, vedere Panoramica dei livelli.
Per ritagliare un'area
- Caricare la bitmap originale da una risorsa. Per informazioni su come caricare una bitmap, vedere Come caricare una bitmap da una risorsa.
- Caricare la maschera bitmap da una risorsa.
- Creare un pennello bitmap con la bitmap originale. Per informazioni su come creare un pennello bitmap, vedere Come creare un pennello bitmap.
- Chiamare ID2D1Factory::SetAntialiasMode per impostare la modalità antialias sulla destinazione di rendering su D2D1_ANTIALIAS_MODE_ALIA edizione Standard D per il funzionamento di ID2D1Factory::FillOpacityMask.
- Chiama FillOpacityMask con la maschera bitmap e il pennello bitmap nella destinazione di rendering per riempire la clip.
La figura seguente mostra la bitmap originale a sinistra, la maschera bitmap al centro e la bitmap ritagliata sulla maschera a destra.
Il codice seguente illustra come ritagliare l'area con la maschera illustrata nella figura precedente. Prima carica la bitmap originale e la maschera bitmap. E quindi crea un pennello bitmap con la bitmap originale.
// 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
);
}
}
Chiama quindi SetAntialiasMode per impostare la modalità antialias. Chiama FillOpacityMask per usare una maschera bitmap per ritagliare la bitmap originale.
// 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);
Per altre informazioni sulle maschere di opacità, vedere Panoramica delle maschere di opacità.
Argomenti correlati