다음을 통해 공유


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

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

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

ID2D1ImageSource는 추상화된 픽셀 공급자입니다. WIC(CreateImageSourceFromWic 또는 IDXGISurface (CreateImageSourceFromDxgi)에서 인스턴스화할 수 있습니다.

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

위에서 언급한 것 외에도 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 구조에는 두 개의 필드가 있습니다.

  • 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에 대해 지원되는 형식

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

참고

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

 

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

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

다음 표에서는 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

 

ID2D1HwndRenderTarget이 하드웨어 가속인지 여부에 관계없이 DXGI_FORMAT_UNKNOWN 형식은 기본적으로 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 Surface 렌더링 대상에 지원되는 형식

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

서식 알파 모드
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 표면 형식을 사용합니다. DXGI 표면 렌더링 대상에서 D2D1_ALPHA_MODE_UNKNOWN 알파 모드를 사용하지 마세요. 기본값이 없으므로 DXGI 표면 렌더링 대상 만들기가 실패합니다.

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

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

서식 알파 모드
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

 

ID2D1DCRenderTarget에서 DXGI_FORMAT_UNKNOWN 형식 또는 D2D1_ALPHA_MODE_UNKNOWN 알파 모드를 사용하지 마세요. 기본값이 없으므로 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 비트맵 소스의 픽셀 형식과 일치해야 합니다.

참고

블록 압축(BCn) 픽셀 형식에 대한 지원에 대한 자세한 내용은 블록 압축을 참조하세요.

 

지원되는 WIC 형식

CreateBitmapFromWicBitmap 메서드를 사용하여 WIC 비트맵에서 비트맵을 만들거나 IWICBitmapLock과 함께 CreateSharedBitmap 메서드를 사용하는 경우 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는 렌더링 대상의 종류에 따라 알파를 설정합니다.

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

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

D2D1_PIXEL_FORMAT

D2D1_ALPHA_MODE

DXGI_FORMAT