Condividi tramite


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

  1. Caricare la bitmap originale da una risorsa. Per informazioni su come caricare una bitmap, vedere Come caricare una bitmap da una risorsa.
  2. Caricare la maschera bitmap da una risorsa.
  3. Creare un pennello bitmap con la bitmap originale. Per informazioni su come creare un pennello bitmap, vedere Come creare un pennello bitmap.
  4. 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.
  5. 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.

illustrazione di una bitmap di pesce rosso, una maschera a forma di pesce creata dalla bitmap e la bitmap risultante a forma di pesce dopo la maschera

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à.

Informazioni di riferimento su Direct2D