Kompatibilis A8 renderelési célok áttekintése
Ez a témakör egy kompatibilis A8-renderelési cél alapjait ismerteti, és példákat tartalmaz annak használatára.
A kompatibilis A8 renderelési cél egy kompatibilis renderelési cél (ID2D1BitmapRenderTarget), amely A8 képpontos formátumot (DXGI_FORMAT_A8_UNORM) használ. Kompatibilis A8 renderelési célokkal javíthatja az alkalmazás teljesítményét, és zökkenőmentesebb átmeneteket biztosíthat a szöveganimáció során. A kompatibilis A8 renderelési cél különösen akkor hasznos, ha az alábbiakat próbálja javítani:
A szöveget vagy alias nélküli geometriát megjelenítő alkalmazás képkockasebessége, amely csak egyszerű animációkat, például fordítást, forgatást, méretezést vagy színváltozásokat tartalmaz.
Az alkalmazás vizuális folytonossága, amely kinyújtja és csökkenti a szöveget egy animáció során.
Kompatibilis A8 renderelési cél létrehozásához használja az ID2D1RenderTarget::CreateCompatibleRenderTarget metódust a DXGI_FORMAT_A8_UNORM képpontformátummal együtt, és adjon meg egy visszaadott kompatibilis renderelési célt. További információ a képpontformátumokról: Támogatott képpontformátumok és alfamódok.
Ha például a következő képernyőképen látható szöveget szeretné hatékonyan animálni, használjon kompatibilis A8-renderelési célt a szöveg átlátszatlansági maszkként való gyorsítótárazásához. Ezután alkalmazza az átalakításokat az átlátszatlansági maszkra a gyors renderelési eredmények eléréséhez.
animálásához
Az alábbi kód bemutatja, hogyan teheti ezt meg. Létrehoz egy kompatibilis A8 renderelési célterületet, lekéri a bitképet, majd a FillOpacityMaskhasználatával rendereli azt.
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();