ID2D1DeviceContext2::CreateImageSourceFromDxgi 方法 (d2d1_3.h)

从一组 DXGI 图面 () 创建图像源。 在后续绘制过程中,YCbCr 图面 () 将自动转换为 RGBA。

语法

HRESULT CreateImageSourceFromDxgi(
  IDXGISurface                        **surfaces,
  UINT32                              surfaceCount,
  DXGI_COLOR_SPACE_TYPE               colorSpace,
  D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS options,
  ID2D1ImageSource                    **imageSource
);

参数

surfaces

类型:[in] IDXGISurface**

要从中创建图像源的 DXGI 图面。

surfaceCount

类型: UINT32

提供的图面数;必须介于 1 到 3 之间。

colorSpace

类型: DXGI_COLOR_SPACE_TYPE

输入的颜色空间。

options

类型: D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS

控制颜色空间转换的选项。

imageSource

类型:[out] ID2D1ImageSource**

接收新的图像源实例。

返回值

类型: HRESULT

如果成功,则S_OK,否则返回失败 HRESULT。

注解

此方法创建可用于绘制图像的图像源。

此方法支持使用一组有限的 DXGI 格式和 DXGI 颜色空间类型的图面。 仅支持以下一组颜色空间类型、图面格式和图面计数的组合:

颜色空间类型 Surface Count () Surface 格式 ()
DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709 1 标准 D2D 支持的像素格式:
  • DXGI_FORMAT_A8_UNORM
  • DXGI_FORMAT_R8_UNORM
  • DXGI_FORMAT_R8G8_UNORM
  • DXGI_FORMAT_R8G8B8A8_UNORM
  • DXGI_FORMAT_B8G8R8A8_UNORM
  • DXGI_FORMAT_B8G8R8X8_UNORM
  • DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
  • DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
  • DXGI_FORMAT_R16G16B16A16_FLOAT
  • DXGI_FORMAT_R16G16B16A16_UNORM
  • DXGI_FORMAT_R32G32B32A32_FLOAT
  • DXGI_FORMAT_BC1_UNORM
  • DXGI_FORMAT_BC2_UNORM
  • DXGI_FORMAT_BC3_UNORM
DXGI_COLOR_SPACE_YCBCR_FULL_G22_NONE_P709_X601 1, 2, 3 当 Surface 计数为 1 时:
  • DXGI_FORMAT_AYUV
  • DXGI_FORMAT_NV12
  • DXGI_FORMAT_YUY2
  • DXGI_FORMAT_P208
  • DXGI_FORMAT_V208
  • DXGI_FORMAT_V408
当 Surface 计数为 2 时:
  • {DXGI_FORMAT_R8_UNORM, DXGI_FORMAT_R8G8_UNORM}
当 Surface 计数为 3 时:
  • {DXGI_FORMAT_R8_UNORM, DXGI_FORMAT_R8_UNORM, DXGI_FORMAT_R8_UNORM}
DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P601 DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P601

DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P709

DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P709

DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P2020

DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P2020

1,2,3 当 Surface 计数为 1 时:
  • DXGI_FORMAT_NV12
  • DXGI_FORMAT_YUY2
  • DXGI_FORMAT_P208
  • DXGI_FORMAT_V208
当 Surface 计数为 2 时:
  • {DXGI_FORMAT_R8_UNORM, DXGI_FORMAT_R8G8_UNORM}
当 Surface 计数为 3 时:
  • {DXGI_FORMAT_R8_UNORM, DXGI_FORMAT_R8_UNORM, DXGI_FORMAT_R8_UNORM}
 

GPU 还必须对像素格式具有足够的支持,才能由 D2D 支持。 若要确定 D2D 是否支持格式,请调用 IsDxgiFormatSupported。

此 API 使用提供的颜色空间类型和选项将 YCbCr 格式转换为 sRGB。 RGBA 数据假定位于所需空间中,D2D 不应用任何转换。

如果提供了多个图面,此方法会根据每个相应源矩形 (的相对大小推断色度平面是否按 2 倍) (子采样,或者如果源矩形参数为 NULL,则每个图面的边界) 。 第二个和第三个矩形的大小必须等于第一个矩形,或与第一个矩形的大小相等,其中一个或两个尺寸都按 0.5 (,同时向上舍入) 。

如果提供,源矩形必须在相应图面的边界内。 源矩形可能具有不同的原点。 在这种情况下,此方法移动每个平面中的数据以彼此对齐。

要求

要求
最低受支持的客户端 Windows 10 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows Server 2016 [桌面应用 |UWP 应用]
目标平台 Windows
标头 d2d1_3.h
DLL D2d1.dll

另请参阅

ID2D1DeviceContext2