共用方式為


相容的 A8 渲染目標概觀

本主題描述相容 A8 轉譯目標的基本概念,並提供如何使用它的範例。

相容的 A8 渲染目標是使用 A8 像素格式(DXGI_FORMAT_A8_UNORM)的相容渲染目標(ID2D1BitmapRenderTarget)。 您可以使用相容的 A8 轉譯目標來改善應用程式的效能,並在文字動畫期間提供更順暢的轉換。 當您嘗試改善下列專案時,相容的 A8 轉譯目標特別有用:

  • 用於呈現文字或抗鋸齒幾何圖形的應用程式之幀速率,只包含簡單動畫,例如位移、旋轉、縮放或顏色變更。

  • 在動畫過程中,文字的延展和縮減影響了應用程式的視覺連貫性。

若要建立相容的 A8 轉譯目標,請使用 ID2D1RenderTarget::CreateCompatibleRenderTarget 方法搭配DXGI_FORMAT_A8_UNORM圖元格式,並指定傳回的相容轉譯目標。 如需圖元格式的詳細資訊,請參閱 支援的像素格式和 alpha 模式

例如,若要有效率地動畫化下列螢幕快照中顯示的文字,請使用相容的 A8 渲染目標,將文字快取為不透明度遮罩。 然後,將轉換套用至透明遮罩,以取得快速渲染結果。

將要動畫化文字的螢幕快照

下列程式代碼示範如何執行這項作。 它會建立相容的 A8 轉譯目標、從中擷取位圖,然後使用 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();

Direct2D 參考資料