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

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();