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