本主題描述相容 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();