次の方法で共有


互換性のある A8 レンダー ターゲットの概要

このトピックでは、互換性のある A8 レンダー ターゲットの基本について説明し、その使用方法の例を提供します。

互換性のある A8 レンダー ターゲットは、A8 ピクセル形式 (DXGI_FORMAT_A8_UNORM) を使用する互換性のあるレンダー ターゲット (ID2D1BitmapRenderTarget) です。 互換性のある A8 レンダー ターゲットを使用すると、アプリケーションのパフォーマンスを向上させ、テキスト アニメーション中にスムーズな切り替えができるようになります。 互換性のある A8 レンダー ターゲットは、以下を改善する場合に特に役立ちます。

  • 翻訳、回転、スケール、色の変更など、単純なアニメーションのみを含むテキストまたはアンチエイリアス ジオメトリをレンダリングするアプリケーションのフレーム レート。

  • アニメーション中にテキストを拡大および縮小するアプリケーションの視覚的な連続性。

互換性のある A8 レンダー ターゲットを作成するには、ID2D1RenderTarget::CreateCompatibleRenderTarget メソッドを DXGI_FORMAT_A8_UNORM ピクセル形式と共に使用し、返される互換性のあるレンダー ターゲットを指定します。 ピクセル形式の詳細については、「サポートされているピクセル形式とアルファ モード」を参照してください。

たとえば、次のスクリーン ショットに示されているテキストを効率的にアニメーション化するには、互換性のある 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 リファレンス