兼容的 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 参考