Freigeben über


Übersicht über kompatible A8-Renderziele

In diesem Thema werden die Grundlagen eines kompatiblen A8-Renderziels beschrieben, und es werden Beispiele für die Verwendung erläutert.

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 bereitzustellen. Ein kompatibles A8-Renderziel ist besonders nützlich, wenn Sie versuchen, Folgendes zu verbessern:

  • Die Bildfrequenz der Anwendung, die Text- oder Antialiasing-Geometrie rendert, die nur einfache Animationen enthält, z. B. Übersetzung, Zweifingerdrehung, Skalierung oder Farbänderungen.

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

Verwenden Sie zum Erstellen eines kompatiblen A8-Renderziels die ID2D1RenderTarget::CreateCompatibleRenderTarget-Methode zusammen mit dem Pixelformat DXGI_FORMAT_A8_UNORM, und geben Sie ein zurückgegebenes kompatibles Renderziel an. Weitere Informationen zu Pixelformaten finden Sie unter Unterstützte Pixelformate und Alphamodi.

Verwenden Sie z. B. ein kompatibles A8-Renderziel, um den Text effizient zu animieren, der im folgenden Screenshot angezeigt wird, um den Text als Deckkraftmaske zwischenzuspeichern. Wenden Sie dann Transformationen auf die Deckkraftmaske an, um schnelle Rendering-Ergebnisse 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 mithilfe von 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