다음을 통해 공유


지원되는 픽셀 형식 및 알파 모드

ID2D1Bitmap,및 ID2D1ImageSource하는 각 렌더링 대상 유형을 포함하여 Direct2D의 다양한 부분에서 지원하는 픽셀 형식 및 알파 모드에 대해 이 토픽에서 설명합니다. 다음과 같은 섹션이 여기에 포함됩니다.

DXGI 이미지 원본에 대해 지원되는 YUV 형식

픽셀의 추상화된 공급자는 ID2D1ImageSource입니다. CreateImageSourceFromWic 또는 IDXGISurface(CreateImageSourceFromDxgi)에서 인스턴스화가 가능합니다.

ID2D1Bitmap과 동일한 픽셀 형식 및 알파 모드 집합을 ID2D1ImageSourceFromWic이 지원합니다.

위에서 언급한 것 외에도 IDXGISurface에서 인스턴스화된 ID2D1ImageSource는 여러 표면으로 분할된 평면 데이터를 포함하여 일부 YUV 픽셀 형식도 지원합니다. CreateImageSourceFromDxgi를 참조하여 각 픽셀 형식의 요구 사항에 대한 자세한 내용을 확인하세요.

형식
DXGI_FORMAT_AYUV
DXGI_FORMAT_NV12
DXGI_FORMAT_YUY2
DXGI_FORMAT_P208
DXGI_FORMAT_V208
DXGI_FORMAT_V408
DXGI_FORMAT_R8_UNORM
DXGI_FORMAT_R8G8_UNORM

 

렌더링 대상에 대한 픽셀 형식 지정

렌더링 대상 생성 시, 해당 픽셀 형식을 지정해야 합니다. D2D1_PIXEL_FORMAT 구조를 사용하여 D2D1_RENDER_TARGET_PROPERTIES 구조체의 pixelFormat 멤버를 설정하여 픽셀 형식을 지정합니다. 다음으로, 해당 구조를 ID2D1Factory::CreateHwndRenderTarget 등의 적절한 Create 메서드에 전달합니다.

두 개의 필드가 D2D1_PIXEL_FORMAT 구조에 있습니다.

  • 형식, 각 픽셀에서 채널의 크기 및 배열을 설명하는 DXGI_FORMAT 값, 그리고
  • 알파, 알파 정보가 해석되는 방법을 설명하는 D2D1_ALPHA_MODE 값.

다음의 예시에서는 D2D1_PIXEL_FORMAT 구조를 생성하고, ID2D1HwndRenderTarget의 픽셀 형식 및 알파 모드를 지정하기 위해 이를 사용합니다.

RECT rc;
GetClientRect(m_hwnd, &rc);

D2D1_SIZE_U size = D2D1::SizeU(
    rc.right - rc.left,
    rc.bottom - rc.top
    );

// Create a pixel format and initial its format
// and alphaMode fields.
D2D1_PIXEL_FORMAT pixelFormat = D2D1::PixelFormat(
    DXGI_FORMAT_B8G8R8A8_UNORM,
    D2D1_ALPHA_MODE_IGNORE
    );

D2D1_RENDER_TARGET_PROPERTIES props = D2D1::RenderTargetProperties();
props.pixelFormat = pixelFormat;

// Create a Direct2D render target.
hr = m_pD2DFactory->CreateHwndRenderTarget(
    props,
    D2D1::HwndRenderTargetProperties(m_hwnd, size),
    &m_pRT
    );

서로 다른 형식 및 알파 모드 조합을 다른 렌더링 대상이 지원합니다. 각 렌더링 대상에서 지원하는 형식 및 알파 조합을 다음 섹션에서 나열합니다.

ID2D1HwndRenderTarget에 대해 지원되는 형식

하드웨어 또는 소프트웨어를 사용하여 렌더링하는지 또는 Direct2D가 기본적으로 렌더링 모드를 자동으로 처리하는지에 따라 ID2D1HwndRenderTarget에 대해 지원되는 형식이 달라집니다.

참고 항목

DXGI_FORMAT_B8G8R8A8_UNORM 픽셀 형식으로 사용하는 것이 성능 향상을 위해 권장됩니다. 특히 소프트웨어 렌더링 대상에 이러한 사항이 유용합니다. RGBA 형식보다 BGRA 형식 대상의 성능이 우수합니다.

 

ID2D1HwndRenderTarget 생성 시, 렌더링 옵션을 지정하기 위해 D2D1_RENDER_TARGET_PROPERTIES 구조를 사용합니다. 이전 섹션에서 설명한 대로, 옵션에는 픽셀 형식이 포함됩니다. 렌더링 대상이 하드웨어 또는 소프트웨어에 렌더링되는지 또는 Direct2D가 렌더링 모드를 자동으로 결정해야 하는지 여부를 지정하기 위해 이 구조의 형식 필드를 사용할 수 있습니다.

D2D1_RENDER_TARGET_TYPE_DEFAULT 설정을 사용하여 Direct2D를 사용하여 렌더링 대상이 하드웨어 또는 소프트웨어 렌더링을 사용하는지 여부를 확인합니다.

D2D1_RENDER_TARGET_TYPE_DEFAULT 설정을 사용하여 만든 ID2D1HwndRenderTarget 개체에 대해 지원되는 형식을 다음 표에서 나열합니다.

형식 알파 모드
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_IGNORE
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_UNKNOWN
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_IGNORE
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_UNKNOWN

 

D2D1_RENDER_TARGET_TYPE_HARDWARE 설정을 사용하여 렌더링 대상이 하드웨어 렌더링을 사용하도록 강제합니다. 하드웨어 렌더링을 명시적으로 사용하는 ID2D1HwndRenderTarget 개체에 대해 지원되는 형식을 다음 표에서 나열합니다.

형식 알파 모드
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_IGNORE
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_UNKNOWN
DXGI_FORMAT_R8G8B8A8_UNORM D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_R8G8B8A8_UNORM D2D1_ALPHA_MODE_IGNORE
DXGI_FORMAT_R8G8B8A8_UNORM D2D1_ALPHA_MODE_UNKNOWN
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_IGNORE
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_UNKNOWN

 

D2D1_RENDER_TARGET_TYPE_SOFTWARE 설정을 사용하여 렌더링 대상이 소프트웨어 렌더링을 사용하도록 강제합니다. 소프트웨어 렌더링을 명시적으로 사용하는 ID2D1HwndRenderTarget 개체에 대해 지원되는 형식을 다음 표에서 나열합니다.

형식 알파 모드
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_IGNORE
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_UNKNOWN
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_IGNORE
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_UNKNOWN

 

DXGI_FORMAT_UNKNOWN 형식은 ID2D1HwndRenderTarget이 하드웨어 가속인지 여부에 관계없이 기본적으로 DXGI_FORMAT_B8G8R8A8을 사용하며, D2D1_ALPHA_MODE_UNKNOWN 알파 모드는 기본적으로 D2D1_ALPHA_MODE_IGNORE을 사용합니다.

ID2D1DeviceContext에 대해 지원되는 형식

디바이스 컨텍스트는 Windows 8부터 다음과 같은 Direct3D 높은 색 형식을 더욱 많이 활용합니다.

  • DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
  • DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
  • DXGI_FORMAT_R16G16B16A16_UNORM
  • DXGI_FORMAT_R16G16B16A16_FLOAT
  • DXGI_FORMAT_R32G32B32A32_FLOAT

특정 디바이스 컨텍스트에서 형식이 작동하는지 여부를 확인하기 위해 ID2D1DeviceContext::IsDxgiFormatSupported 메서드를 사용합니다. ID2D1HwndRenderTarget에서도 이러한 형식이 작동할 수 있습니다.

Windows 7의 ID2D1HwndRenderTarget 인터페이스에서 지원하는 형식에 이러한 형식이 추가됩니다. 디바이스 및 디바이스 컨텍스트를 참조하여 자세한 내용을 확인하세요.

호환되는 렌더링 대상에 대해 지원되는 형식

호환되는 렌더링 대상(ID2D1RenderTarget::CreateCompatibleRenderTarget 메서드 중 하나에서 만든 ID2D1BitmapRenderTarget)은 렌더링 대상을 만든 렌더링 대상의 지원되는 형식과 알파 모드를 상속합니다. 부모가 지원하는 항목에 관계없이, 호환되는 렌더링 대상은 다음 형식 및 알파 모드 조합도 지원합니다.

형식 알파 모드
DXGI_FORMAT_A8_UNORM D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_A8_UNORM D2D1_ALPHA_MODE_STRAIGHT
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_UNKNOWN

 

DXGI_FORMAT_UNKNOWN 형식은 기본적으로 부모 렌더링 대상 형식을 사용하고, D2D1_ALPHA_MODE_UNKNOWN 알파 모드는 기본적으로 D2D1_ALPHA_MODE_PREMULTIPLIED를 사용합니다.

DXGI 표면 렌더링 대상에 대해 지원되는 형식

ID2D1Factory::CreateDxgiSurfaceRenderTarget 메서드 중 하나에서 만든 ID2D1RenderTarget이 DXGI 렌더링 대상입니다. 이는 다음과 같은 형식 및 알파 모드 조합을 지원합니다.

형식 알파 모드
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_IGNORE
DXGI_FORMAT_R8G8B8A8_UNORM D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_R8G8B8A8_UNORM D2D1_ALPHA_MODE_IGNORE
DXGI_FORMAT_A8_UNORM D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_A8_UNORM D2D1_ALPHA_MODE_STRAIGHT
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_IGNORE

 

참고 항목

DXGI 표면 렌더링 대상이 그리는 DXGI 표면의 형식과 해당 형식이 일치해야 합니다.

 

기본적으로 DXGI_FORMAT_UNKNOWN 형식은 DXGI 표면 형식을 사용합니다. D2D1_ALPHA_MODE_UNKNOWN 알파 모드를 DXGI 표면 렌더링 대상에 사용하지 마세요. DXGI 표면 렌더링 대상 만들기는 기본값이 없으므로 실패합니다.

WIC 비트맵 렌더링 대상에 대해 지원되는 형식

ID2D1Factory::CreateWicBitmapRenderTarget 메서드 중 하나에서 만든 ID2D1RenderTarget이 WIC 비트맵 대상입니다. 이는 다음과 같은 형식 및 알파 모드 조합을 지원합니다.

형식 알파 모드
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_IGNORE
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_UNKNOWN
DXGI_FORMAT_A8_UNORM D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_A8_UNORM D2D1_ALPHA_MODE_STRAIGHT
DXGI_FORMAT_A8_UNORM D2D1_ALPHA_MODE_UNKNOWN
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_IGNORE
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_UNKNOWN

 

WIC 비트맵의 픽셀 형식과 WIC 비트맵 대상의 픽셀 형식은 일치해야 합니다.

DXGI_FORMAT_UNKNOWN 형식은 기본적으로 WIC 비트맵 형식을 사용하며, D2D1_ALPHA_MODE_UNKNOWN 알파 모드는 기본적으로 WIC 비트맵 알파 모드를 사용합니다.

ID2D1DCRenderTarget에 대해 지원되는 형식

다음과 같은 형식 및 알파 모드 조합을 ID2D1DCRenderTarget이 지원합니다.

형식 알파 모드
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_IGNORE

 

DXGI_FORMAT_UNKNOWN 형식 또는 D2D1_ALPHA_MODE_UNKNOWN 알파 모드를 ID2D1DCRenderTarget에서 사용하지 마세요. ID2D1DCRenderTarget 만들기는 기본값이 없으므로 실패합니다.

ID2D1Bitmap에 대한 픽셀 형식 지정

일반적으로 (다음 단락에 설명된 몇 가지 제한 사항을 포함하는) 다음과 같은 형식 및 알파 모드를 ID2D1Bitmap 개체가 지원합니다.

형식 알파 모드
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_IGNORE
DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_UNKNOWN
DXGI_FORMAT_A8_UNORM D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_A8_UNORM D2D1_ALPHA_MODE_STRAIGHT
DXGI_FORMAT_A8_UNORM D2D1_ALPHA_MODE_UNKNOWN
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_IGNORE
DXGI_FORMAT_UNKNOWN D2D1_ALPHA_MODE_UNKNOWN
DXGI_FORMAT_B8G8R8X8_UNORM(Windows 8.1 이상 전용) D2D1_ALPHA_MODE_IGNORE
DXGI_FORMAT_BC1_UNORM(Windows 8.1 이상 전용) D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_BC1_UNORM(Windows 8.1 이상 전용) D2D1_ALPHA_MODE_IGNORE
DXGI_FORMAT_BC1_UNORM(Windows 8.1 이상 전용) D2D1_ALPHA_MODE_UNKNOWN
DXGI_FORMAT_BC2_UNORM(Windows 8.1 이상 전용) D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_BC2_UNORM(Windows 8.1 이상 전용) D2D1_ALPHA_MODE_IGNORE
DXGI_FORMAT_BC2_UNORM(Windows 8.1 이상 전용) D2D1_ALPHA_MODE_UNKNOWN
DXGI_FORMAT_BC3_UNORM(Windows 8.1 이상 전용) D2D1_ALPHA_MODE_PREMULTIPLIED
DXGI_FORMAT_BC3_UNORM(Windows 8.1 이상 전용) D2D1_ALPHA_MODE_IGNORE
DXGI_FORMAT_BC3_UNORM(Windows 8.1 이상 전용) D2D1_ALPHA_MODE_UNKNOWN

 

ID2D1RenderTarget::CreateSharedBitmap 메서드를 사용하는 경우, 새 렌더링 대상의 픽셀 형식을 지정하기 위해 D2D1_BITMAP_PROPERTIES 구조체의 pixelFormat 필드를 사용합니다. 이는 ID2D1Bitmap 원본의 픽셀 형식과 일치해야 합니다.

CreateBitmapFromWicBitmap 메서드를 사용하는 경우, 새 렌더링 대상의 픽셀 형식을 지정하기 위해 (D2D1_RENDER_TARGET_PROPERTIES 구조체의 pixelFormat 멤버 대신) D2D1_BITMAP_PROPERTIES 구조체의 pixelFormat 필드를 사용합니다. 이는 WIC 비트맵 원본의 픽셀 형식과 일치해야 합니다.

참고 항목

블록 압축을 참조하여 블록 압축(BCₙ) 픽셀 형식에 대한 지원에 대한 자세한 내용을 확인하세요.

 

지원되는 WIC 형식

CreateBitmapFromWicBitmap 메서드를 사용하여 WIC 비트맵에서 비트맵을 만들거나 CreateSharedBitmap 메서드를 IWICBitmapLock과 함께 사용하는 경우, WIC 원본은 Direct2D에서 지원하는 형식이어야 합니다.

WIC 형식 해당하는 DXGI 형식 해당하는 알파 모드
GUID_WICPixelFormat8bppAlpha DXGI_FORMAT_A8_UNORM D2D1_ALPHA_MODE_STRAIGHT 또는 D2D1_ALPHA_MODE_PREMULTIPLIED
GUID_WICPixelFormat32bppPRGBA DXGI_FORMAT_R8G8B8A8_UNORM D2D1_ALPHA_MODE_PREMULTIPLIED 또는 D2D1_ALPHA_MODE_IGNORE
GUID_WICPixelFormat32bppBGR DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_IGNORE
GUID_WICPixelFormat32bppPBGRA DXGI_FORMAT_B8G8R8A8_UNORM D2D1_ALPHA_MODE_PREMULTIPLIED

 

파일에서 비트맵을 로드하는 방법을 참조하여 WIC 비트맵을 지원되는 형식으로 변환하는 방법을 보여 주는 예시를 확인하세요.

지원되지 않는 형식 사용

D2DERR_UNSUPPORTED_PIXEL_FORMAT 또는 E_INVALIDARG 오류는 이전 표에 나열된 픽셀 형식과 알파 모드 이외의 조합을 사용하는 경우에 발생합니다.

알파 모드 정보

미리 곱한 알파 모드 및 직선 알파 모드 정보

알파 채널이 미리 곱한 알파, 직선 알파를 사용하는지, 또는 무시되고 불투명한 것으로 간주되어야 하는지를 D2D1_ALPHA_MODE 열거형이 보여 줍니다. 색이 얼마나 투명한지에 해당하는 값을 직선 알파를 사용하는 알파 채널이 나타냅니다.

대상 형식에 관계없이, 색은 Direct2D 그리기 명령 및 브러시에 의해 항상 직선 알파로 처리됩니다.

각 색 채널의 크기는 미리 곱한 알파를 사용하면 알파 값으로 조정됩니다. 일반적으로 색 채널 값은 알파 채널 값보다 크지 않습니다. 미리 곱한 형식의 색 채널 값이 알파 채널보다 큰 경우, 표준 소스 오버 혼합 수학이 가산 혼합을 만듭니다.

직선 및 미리 곱한 알파에서의 알파 채널 자체의 값은 동일합니다.

직선 알파와 미리 곱한 알파의 차이

RGBA 색을 직선 알파를 사용하여 설명할 때, 색의 알파 값은 알파 채널에 저장됩니다. 예를 들어, 다음과 같은 값을 사용하여 60% 불투명한 빨간색을 설명할 수 있습니다. (255, 0, 0, 255 * 0.6) = (255, 0, 0, 153). 255 값은 전체 빨간색을 나타내며, 153(255의 60%)은 불투명도가 60%여야 한다는 것을 나타냅니다.

RGBA 색을 미리 곱한 알파를 사용하여 설명할 때, 각 색은 다음과 같은 알파 값을 곱합니다. (255 * 0.6, 0 * 0.6, 0 * 0.6, 0.6 * 0.6) = (153, 0, 0, 153).

렌더링 대상의 알파 모드에 관계없이, D2D1_COLOR_F 값은 항상 직선 알파로 해석됩니다. 예를 들어, 미리 곱한 알파 모드를 사용하는 렌더링 대상과 함께 사용할 ID2D1SolidColorBrush의 색을 지정할 때 렌더링 대상이 직선 알파를 사용하는 경우와 마찬가지로 색을 지정합니다. 브러시로 칠할 때, Direct2D는 대상 형식으로 색을 변환합니다.

렌더링 대상에 대한 알파 모드

렌더링 대상의 콘텐츠는 알파 모드 설정에 관계없이 투명도를 지원합니다. 예를 들어, D2D1_ALPHA_MODE_IGNORE 렌더링 대상으로 알파 모드가 부분적으로 투명한 빨간색 사각형을 그리면, (배경이 흰색인 경우) 분홍색으로 사각형이 표시됩니다.

알파 모드가 D2D1_ALPHA_MODE_PREMULTIPLIED일 때, 부분적으로 투명한 빨간색 사각형을 그리면 (배경이 흰색이라고 가정할 경우) 분홍색으로 사각형이 나타나며 렌더링 대상 뒤에 있는 모든 것을 볼 수 있습니다. ID2D1DCRenderTarget을 사용하여 투명 창으로 렌더링하거나, 호환되는 렌더링 대상(CreateCompatibleRenderTarget 메서드에서 만든 렌더링)을 사용하여 투명도를 지원하는 비트맵을 만들 때 유용합니다.

ClearType 및 알파 모드

렌더링 대상에 대해 D2D1_ALPHA_MODE_IGNORE 이외의 알파 모드를 지정하면 텍스트 앤티앨리어싱 모드가 자동으로 D2D1_TEXT_ANTIALIAS_MODE CLEARTYPE에서 D2D1_TEXT_ANTIALIAS_MODE GRAYSCALE로 변경됩니다. (D2D1_ALPHA_MODE_UNKNOWN의 알파 모드를 지정하는 경우, 렌더링 대상의 종류에 따라 Direct2D가 알파를 설정합니다.)

텍스트 앤티앨리어스 모드를 다시 D2D1_TEXT_ANTIALIAS_MODE CLEARTYPE으로 변경하기 위해 SetTextAntialiasMode 메서드를 사용할 수 있지만, ClearType 텍스트를 투명한 표면으로 렌더링하면 예측할 수 없는 결과가 발생 가능합니다. 다음과 같은 두 가지 기술 중 하나를 사용하여 ClearType 텍스트를 투명한 렌더링 대상으로 렌더링하는 것이 권장됩니다.

  • 렌더링 대상을 텍스트가 렌더링될 영역으로 클리핑하기 위해 PushAxisAlignedClip 메서드를 사용한 뒤, Clear 메서드를 호출하고 불투명 색을 지정한 뒤 텍스트를 렌더링합니다.
  • 텍스트가 렌더링될 영역 뒤에 불투명 사각형을 그리기 위해 DrawRectangle을 사용합니다.

D2D1_PIXEL_FORMAT

D2D1_ALPHA_MODE

DXGI_FORMAT