Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе описывается использование растрового изображения в качестве маски непрозрачности путем вызова метода ID2D1Factory::FillOpacityMask. Маска непрозрачности — это растровое изображение, которое предоставляет сведения о охвате, представленные альфа-каналом, который управляет прозрачностью отрисованного содержимого. Этот подход более эффективен, чем использование слоев с маской непрозрачности. Дополнительные сведения см. в обзоре слоев.
Обрезать область
- Загрузите исходное растровое изображение из ресурса. Сведения о загрузке растрового изображения см. в разделе Загрузка растрового изображения изресурса.
- Загрузите маску растрового изображения из ресурса.
- Создайте растровую кисть с оригиналом растрового изображения. Сведения о том, как создать растровую кисть, см. в разделе Как создавать растровые кисти.
- Вызовите ID2D1Factory::SetAntialiasMode, чтобы установить режим сглаживания на целевом устройстве отрисовки в D2D1_ANTIALIAS_MODE_ALIASED, чтобы ID2D1Factory::FillOpacityMask работал.
- Вызовите FillOpacityMask с маской растрового изображения и кистью растрового изображения в целевом объекте отрисовки, чтобы заполнить клип.
На следующем рисунке показана исходная растровая карта слева, маска растрового изображения в центре и растровое изображение, обрезанное маской справа.
В следующем коде показано, как вырезать регион с помощью маски, показанной на предыдущем рисунке. Сначала он загружает исходное растровое изображение и маску растрового изображения. А затем создаётся растровая кисть с оригинальным растровым изображением.
// Create the bitmap to be used by the bitmap brush
if (SUCCEEDED(hr))
{
hr = LoadResourceBitmap(
m_pRenderTarget,
m_pWICFactory,
L"GoldFish",
L"Image",
&m_pOrigBitmap
);
}
if (SUCCEEDED(hr))
{
hr = LoadResourceBitmap(
m_pRenderTarget,
m_pWICFactory,
L"GoldFishMask",
L"Image",
&m_pBitmapMask
);
}
if (SUCCEEDED(hr))
{
D2D1_BITMAP_BRUSH_PROPERTIES propertiesXClampYClamp = D2D1::BitmapBrushProperties(
D2D1_EXTEND_MODE_CLAMP,
D2D1_EXTEND_MODE_CLAMP,
D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR
);
hr = m_pRenderTarget->CreateBitmapBrush(
m_pOrigBitmap,
propertiesXClampYClamp,
&m_pOriginalBitmapBrush
);
if (SUCCEEDED(hr))
{
hr = m_pRenderTarget->CreateBitmapBrush(
m_pBitmapMask,
propertiesXClampYClamp,
&m_pBitmapMaskBrush
);
}
}
Затем он вызывает SetAntialiasMode, чтобы задать режим антиалиас. Вызовите функцию FillOpacityMask, чтобы использовать маску растрового изображения для обрезки исходного растрового изображения.
// D2D1_ANTIALIAS_MODE_ALIASED must be set for FillOpacityMask
// to function properly.
m_pRenderTarget->SetAntialiasMode(D2D1_ANTIALIAS_MODE_ALIASED);
m_pRenderTarget->FillOpacityMask(
m_pBitmapMask,
m_pOriginalBitmapBrush,
D2D1_OPACITY_MASK_CONTENT_GRAPHICS,
&rcBrushRect,
NULL
);
m_pRenderTarget->SetAntialiasMode(D2D1_ANTIALIAS_MODE_PER_PRIMITIVE);
Дополнительные сведения о масках непрозрачности см. в обзоре масок непрозрачности .
Связанные разделы