Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit onderwerp worden de basisbeginselen van een compatibel A8-renderdoel beschreven en vindt u voorbeelden van hoe u het kunt gebruiken.
Een compatibel A8-renderdoel is een compatibel renderdoel (ID2D1BitmapRenderTarget) die een A8-pixelindeling (DXGI_FORMAT_A8_UNORM) gebruikt. U kunt een compatibel A8-renderdoel gebruiken om de prestaties van de toepassing te verbeteren en soepelere overgangen te bieden tijdens tekstanimatie. Een compatibel A8-renderdoel is met name handig wanneer u het volgende probeert te verbeteren:
De framesnelheid van de toepassing waarmee tekst of antialiasgeometrie wordt weergegeven die alleen eenvoudige animaties bevat, zoals vertaling, rotatie, schaal of kleurwijzigingen.
De visuele continuïteit van de toepassing die tekst uitrekt en vermindert tijdens een animatie.
Als u een compatibel A8-renderdoel wilt maken, gebruikt u de methode ID2D1RenderTarget::CreateCompatibleRenderTarget methode samen met de DXGI_FORMAT_A8_UNORM pixelindeling en geeft u een geretourneerd compatibel renderdoel op. Zie Ondersteunde pixelindelingen en alfamodivoor meer informatie over pixelindelingen.
Als u animatie bijvoorbeeld efficiënt wilt toepassen op de tekst die in de volgende schermafbeelding wordt weergegeven, gebruikt u een compatibel A8-renderdoel om de tekst te cachen als een doorzichtigheidsmasker. Pas vervolgens transformaties toe op het dekkingsmasker om snelle renderingresultaten te bereiken.
In de volgende code ziet u hoe u dit doet. Het maakt een compatibel A8-renderdoel, haalt de bitmap ervan op en geeft vervolgens de bitmap weer met behulp van 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();