불투명 마스크로 비트맵을 사용하는 방법
이 항목에서는 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);
불투명 마스크에 대한 자세한 내용은 불투명 마스크 개요를 참조하세요.
관련 항목