Panoramica delle destinazioni di rendering A8 compatibili
In questo argomento vengono descritte le nozioni di base di una destinazione di rendering A8 compatibile e vengono forniti esempi di come usarlo.
Una destinazione di rendering A8 compatibile è una destinazione di rendering compatibile (ID2D1BitmapRenderTarget) che usa un formato A8 pixel (DXGI_FORMAT_A8_UNORM). Puoi usare una destinazione di rendering A8 compatibile per migliorare le prestazioni dell'applicazione e fornire transizioni più fluide durante l'animazione del testo. Una destinazione di rendering A8 compatibile è particolarmente utile quando si tenta di migliorare quanto segue:
Frequenza dei fotogrammi dell'applicazione che esegue il rendering di testo o geometria anti-aliasing che include solo animazioni semplici, ad esempio traslazione, rotazione, scala o modifica del colore.
Continuità visiva dell'applicazione che estende e diminuisce il testo durante un'animazione.
Per creare una destinazione di rendering A8 compatibile, usare il metodo ID2D1RenderTarget::CreateCompatibleRenderTarget insieme al formato pixel DXGI_FORMAT_A8_UNORM e specificare una destinazione di rendering compatibile restituita. Per altre informazioni sui formati pixel, vedere Formati pixel supportati e modalità alfa.
Ad esempio, per animare in modo efficiente il testo visualizzato nella schermata seguente, usare una destinazione di rendering A8 compatibile per memorizzare nella cache il testo come maschera di opacità. Applicare quindi trasformazioni alla maschera di opacità per ottenere risultati di rendering rapidi.
A tal fine, osservare il codice indicato di seguito. Crea una destinazione di rendering A8 compatibile, recupera la bitmap da essa e quindi esegue il rendering della 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();