兼容的 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();