共用方式為


相容的 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 參考