Verwenden einer Bitmap als Deckkraftmaske
In diesem Thema wird beschrieben, wie Sie eine Bitmap als Opactymaske verwenden, indem Sie die ID2D1Factory::FillOpacityMask-Methode aufrufen. Die Deckkraftmaske ist eine Bitmap, die die Abdeckungsinformationen angibt, die durch den Alphakanal dargestellt werden, der die Transparenz des gerenderten Inhalts steuert. Dieser Ansatz ist effizienter als die Verwendung von Ebenen mit einer Deckkraftmaske. Weitere Informationen finden Sie unter Übersicht über Ebenen.
So clipen Sie einen Bereich
- Laden sie die ursprüngliche Bitmap aus einer Ressource. Informationen zum Laden einer Bitmap finden Sie unter Laden einer Bitmap aus einer Ressource.
- Laden Sie die Bitmapmaske aus einer Ressource.
- Erstellen Sie einen Bitmappinsel mit der ursprünglichen Bitmap. Informationen zum Erstellen eines Bitmappinsels finden Sie unter Erstellen eines Bitmappinsels.
- Rufen Sie ID2D1Factory::SetAntialiasMode auf, um den Antialiasmodus auf dem Renderziel auf D2D1 _ ANTIALIAS MODE ALIASED festzulegen, damit _ _ ID2D1Factory::FillOpacityMask funktioniert.
- Rufen Sie FillOpacityMask mit der Bitmapmaske und dem Bitmappinsel auf dem Renderziel auf, um den Clip zu füllen.
Die folgende Abbildung zeigt die ursprüngliche Bitmap auf der linken Seite, die Bitmapmaske in der Mitte und die Bitmap, die auf die Maske rechts abgeschnitten ist.

Der folgende Code zeigt, wie der Bereich mit der in der vorherigen Abbildung gezeigten Maske abgeschnitten wird. Zuerst werden die ursprüngliche Bitmap und die Bitmapmaske geladen. Anschließend wird ein Bitmappinsel mit der ursprünglichen Bitmap erstellt.
// 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
);
}
}
Anschließend wird SetAntialiasMode aufgerufen, um den Antialiasmodus festzulegen. Rufen Sie FillOpacityMask auf, um eine Bitmapmaske zum Beschneiden der ursprünglichen Bitmap zu verwenden.
// 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);
Weitere Informationen zu Deckkraftmasken finden Sie in der Übersicht über Deckkraftmasken.