Compartir a través de


Cómo usar un mapa de bits como máscara de opacidad

En este tema se describe cómo usar un mapa de bits como máscara de opacidad realizando una llamada al método ID2D1Factory::FillOpacityMask. La máscara de opacidad es un mapa de bits que proporciona la información de cobertura representada por el canal alfa, que controla la transparencia del contenido que se representa. Este enfoque es más eficaz que usar capas con una máscara de opacidad. Para más información, consulte la introducción a las capas.

Para recortar una región

  1. Cargue el mapa de bits original desde un recurso. Para obtener información sobre cómo cargar un mapa de bits, vea Cómo cargar un mapa de bits desde un recurso.
  2. Cargue la máscara de mapa de bits desde un recurso.
  3. Cree un pincel de mapa de bits con el mapa de bits original. Para obtener información sobre cómo crear un pincel de mapa de bits, vea Cómo crear un pincel de mapa de bits.
  4. Realice una llamada a ID2D1Factory::SetAntialiasMode para establecer el modo antialias en el destino de representación en D2D1_ANTIALIAS_MODE_ALIASED para que ID2D1Factory::FillOpacityMask funcione.
  5. Realice una llamada a FillOpacityMask con la máscara de mapa de bits y el pincel del mapa de bits en el destino de representación para rellenar el clip.

En la ilustración siguiente se muestra el mapa de bits original de la izquierda, la máscara de mapa de bits en el centro y el mapa de bits recortado a la máscara de la derecha.

ilustración de un mapa de bits de peces de oro, una máscara con forma de pez creada a partir del mapa de bits y el mapa de bits con forma de pez resultante después de la máscara

En el código siguiente se muestra cómo recortar la región con la máscara que se muestra en la ilustración anterior. Primero carga el mapa de bits original y la máscara de mapa de bits. A continuación, crea un pincel de mapa de bits con el mapa de bits 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
            );
    }
}

A continuación, realiza una llamada a SetAntialiasMode para establecer el modo antialias. Realice una llamada a FillOpacityMask para usar una máscara de mapa de bits para recortar el mapa de bits 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 obtener más información sobre las máscaras de opacidad, consulte la Información general sobre máscaras de opacidad.

Referencia de Direct2D