Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе описываются основы совместимого целевого объекта отрисовки A8 и приведены примеры его использования.
Совместимая целевая поверхность для отрисовки A8 — это совместимый объект отрисовки (ID2D1BitmapRenderTarget), использующий формат пикселя A8 (DXGI_FORMAT_A8_UNORM). Вы можете использовать совместимый целевой объект отрисовки 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();