Compartilhar via


Visão geral dos destinos de renderização A8 compatíveis

Este tópico descreve as noções básicas de um destino de renderização A8 compatível e fornece exemplos de como usá-lo.

Um destino de renderização A8 compatível é um destino de renderização compatível (ID2D1BitmapRenderTarget) que usa um formato de pixel A8 (DXGI_FORMAT_A8_UNORM). Você pode usar um destino de renderização A8 compatível para melhorar o desempenho do aplicativo e fornecer transições mais suaves durante a animação de texto. Um destino de renderização A8 compatível é particularmente útil quando você tenta melhorar o seguinte:

  • A taxa de quadros do aplicativo que renderiza texto ou geometria sem serrilhado que inclui apenas animações simples, como tradução, rotação, escala ou alterações de cor.

  • A continuidade visual do aplicativo que estica e diminui o texto durante uma animação.

Para criar um destino de renderização A8 compatível, use o método ID2D1RenderTarget::CreateCompatibleRenderTarget junto com o formato de pixel DXGI_FORMAT_A8_UNORM e especifique um destino de renderização compatível retornado. Para obter mais informações sobre formatos de pixel, consulte Formatos de pixel com suporte e modos alfa.

Por exemplo, para animar eficientemente o texto mostrado na captura de tela a seguir, use um destino de renderização A8 compatível para armazenar o texto em cache como uma máscara de opacidade. Em seguida, aplique transformações à máscara de opacidade para obter resultados de renderização rápidos.

captura de tela do texto para animar

O código a seguir mostra como fazer isso. Ele cria um destino de renderização A8 compatível, recupera o bitmap dele e, em seguida, renderiza o bitmap usando FillOpacityMask.

ID2D1BitmapRenderTarget *m_pOpacityRT;

// Create the compatible render target using desiredPixelSize to avoid
// blurriness issues caused by a fractional-pixel desiredSize.

D2D1_PIXEL_FORMAT alphaOnlyFormat = D2D1::PixelFormat(
    DXGI_FORMAT_A8_UNORM, 
    D2D1_ALPHA_MODE_PREMULTIPLIED);

hr = m_pRT->CreateCompatibleRenderTarget(
    NULL,
    &maskPixelSize,
    &alphaOnlyFormat,
    D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_NONE,
    &m_pOpacityRT
    );

D2D1_RECT_F destinationRect = D2D1::RectF(
    roundedOffset.x,
    roundedOffset.y,
    roundedOffset.x + opacityRTSize.width,
    roundedOffset.y + opacityRTSize.height
    );

ID2D1Bitmap *pBitmap = NULL;
m_pOpacityRT->GetBitmap(&pBitmap);

pBitmap->GetDpi(&dpiX, &dpiY);

// The antialias mode must be set to D2D1_ANTIALIAS_MODE_ALIASED
// for this method to succeed. We've set this mode already though
// so no need to do it again.

m_pRT->FillOpacityMask(
    pBitmap,
    m_pBlackBrush,
    D2D1_OPACITY_MASK_CONTENT_TEXT_NATURAL,
    &destinationRect
    );

pBitmap->Release();

Referência do Direct2D