Übersicht über kompatible A8-Renderziele

Dieses Thema beschreibt die Grundlagen eines kompatiblen A8-Renderziels und enthält Beispiele für seine Verwendung.

Ein kompatibles A8-Renderziel ist ein kompatibles Renderziel (ID2D1BitmapRenderTarget), das ein A8-Pixelformat (DXGI _ FORMAT _ A8 _ UNORM) verwendet. Sie können ein kompatibles A8-Renderziel verwenden, um die Leistung der Anwendung zu verbessern und reibungslosere Übergänge während der Textanimation zu ermöglichen. Ein kompatibles A8-Renderziel ist besonders nützlich, wenn Sie versuchen, Folgendes zu verbessern:

  • Die Bildfrequenz der Anwendung, die Text oder Geometrie mit Antialiasing rendert, die nur einfache Animationen wie Übersetzungs-, Drehungs-, Skalierungs- oder Farbänderungen enthält.

  • Die visuelle Kontinuität der Anwendung, die Text während einer Animation streckt und verkleinert.

Um ein kompatibles A8-Renderziel zu erstellen, verwenden Sie die ID2D1RenderTarget::CreateCompatibleRenderTarget-Methode zusammen mit dem DXGI _ FORMAT _ A8 UNORM-Pixelformat, und geben Sie ein zurückgegebenes kompatibles Renderziel _ an. Weitere Informationen zu Pixelformaten finden Sie unter Unterstützte Pixelformate und Alphamodi.

Um beispielsweise den im folgenden Screenshot gezeigten Text effizient zu animieren, verwenden Sie ein kompatibles A8-Renderziel, um den Text als Deckkraftmaske zwischenspeichern. Wenden Sie dann Transformationen auf die Deckkraftmaske an, um schnelle Renderingergebnisse zu erzielen.

Screenshot des zu animierenden Texts

Dies wird im folgenden Code veranschaulicht. Es erstellt ein kompatibles A8-Renderziel, ruft die Bitmap daraus ab und rendert dann die Bitmap mit 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();

Direct2D-Referenz