Megosztás a következőn keresztül:


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.

szöveg képernyőképe a 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();

Direct2D-referencia