如何使用位圖作為不透明度遮罩
本主題描述如何藉由呼叫 ID2D1Factory::FillOpacityMask 方法,使用位圖作為不透明度遮罩。 不透明度遮罩是一個位圖,提供Alpha色板所代表的涵蓋範圍資訊,可控制呈現之內容的透明度。 這種方法比使用具有不透明度遮罩的圖層更有效率。 如需詳細資訊,請參閱 圖層概觀。
裁剪區域
- 從資源載入原始點陣圖。 如需如何載入位圖的資訊,請參閱 如何從資源載入位圖。
- 從資源載入位圖遮罩。
- 使用原始點圖建立位圖筆刷。 如需如何建立位圖筆刷的資訊,請參閱 如何建立位圖筆刷。
- 呼叫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);
如需不透明度遮罩的詳細資訊,請參閱 不透明度遮罩概觀。
相關主題