C++ 从IDirect3DDevice9检索ID2D1DeviceContext

C++ 从IDirect3DDevice9检索ID2D1DeviceContext,c++,directx-9,ms-media-foundation,C++,Directx 9,Ms Media Foundation,我使用源阅读器从视频文件中读取视频样本,并使用解码器对其进行解码,然后使用DirectX9渲染这些样本 我正在使用IDirect3DDevice9渲染视频帧,它工作正常 现在我想添加色度键效果,如下所述: 那么,如何从IDirect3DDevice9获取ID2D1DeviceContext,然后向其添加Chorma关键点效果,然后渲染视频帧 ID2D1DeviceContext需要DirectX11设备,不能与过时的IDirect3DDevice9一起使用。通常按以下顺序创建对象:DXGI工厂

我使用源阅读器从视频文件中读取视频样本,并使用解码器对其进行解码,然后使用DirectX9渲染这些样本

我正在使用IDirect3DDevice9渲染视频帧,它工作正常

现在我想添加色度键效果,如下所述:


那么,如何从
IDirect3DDevice9
获取
ID2D1DeviceContext
,然后向其添加Chorma关键点效果,然后渲染视频帧

ID2D1DeviceContext需要DirectX11设备,不能与过时的IDirect3DDevice9一起使用。通常按以下顺序创建对象:DXGI工厂、D2D1工厂、D3D11设备、DXGI设备、D2D1设备,最后是D2D1设备上下文。您可能需要检查一下


除非您被迫为Windows XP提供向后兼容性,否则再处理DirectX9就没有真正的意义了。您发布的色度键示例需要Windows 10。

ID2D1DeviceContext需要DirectX11设备,不能与过时的IDirect3DDevice9一起使用。通常按以下顺序创建对象:DXGI工厂、D2D1工厂、D3D11设备、DXGI设备、D2D1设备,最后是D2D1设备上下文。您可能需要检查一下

除非您被迫为Windows XP提供向后兼容性,否则再处理DirectX9就没有真正的意义了。您发布的色度键示例需要Windows 10

那么如何从
IDirect3DDevice9
获取
ID2D1DeviceContext

你不能从另一个得到一个。接口属于不同的API,如果使用MediaFoundation与Direct3D 9进行解码,Direct2D(其中<代码> ID2D1DEVICECONTEX/<代码>)在那里是没有用的。

与您的请求最接近的是使用API之间的互操作性。有关介绍,请参见,并注意此处提到的Direct3D版本

另见:。下图显示了较新的API通过DXGI进行互操作,但不像Direct3D 9那样古老。另请参阅下面的评论,以获取更新鲜的MSDN链接

那么如何从
IDirect3DDevice9
获取
ID2D1DeviceContext

你不能从另一个得到一个。接口属于不同的API,如果使用MediaFoundation与Direct3D 9进行解码,Direct2D(其中<代码> ID2D1DEVICECONTEX/<代码>)在那里是没有用的。

与您的请求最接近的是使用API之间的互操作性。有关介绍,请参见,并注意此处提到的Direct3D版本

另见:。下图显示了较新的API通过DXGI进行互操作,但不像Direct3D 9那样古老。另请参阅下面的评论,以获取更新鲜的MSDN链接


所以你的意思是我需要使用DirectX11而不是DirectX9。目前,我已经创建了使用DirectX9API渲染视频帧的示例代码。因此,我需要用DirectX11 API替换此代码。是否有任何示例代码可以从视频文件中读取示例,然后使用DirectX11 API显示它们?基本上,我想使用提供的示例将色度键效果应用于视频流。是的,您需要使用DirectX11(或DirectX10)api。将代码转换为将帧存储在ID3D11Texture2D中,然后从中提取IDXGISurface,然后从DXGI曲面提取ID2D1Bitmap1,然后将此D2D位图用作D2D图形/过滤器的渲染目标。在我之前发布的页面上可以找到一些示例代码。所以你的意思是我需要使用DirectX11而不是DirectX9。目前,我已经创建了使用DirectX9API渲染视频帧的示例代码。因此,我需要用DirectX11 API替换此代码。是否有任何示例代码可以从视频文件中读取示例,然后使用DirectX11 API显示它们?基本上,我想使用提供的示例将色度键效果应用于视频流。是的,您需要使用DirectX11(或DirectX10)api。将代码转换为将帧存储在ID3D11Texture2D中,然后从中提取IDXGISurface,然后从DXGI曲面提取ID2D1Bitmap1,然后将此D2D位图用作D2D图形/过滤器的渲染目标。在我之前发布的页面上可以找到一些示例代码。我需要在使用源阅读器读取的视频帧上添加色度键效果。我发现这个API是由MS for Chroma Key提供的,所以我试图获取
ID2D1DeviceContext
。因此,如果我需要使用MS为色度键证明的API,我需要遵循什么方法。@Roman R。请注意,您发布的图像有些过时。D2D可以很好地与DX11配合使用(但还不能与DX12配合使用)。DXGI发展到1.5版等等。@VTT:你是对的,同时我认为图像给出了API互操作的正确想法(D2D和D3D11到DXGI之间的绿色箭头无论如何都会显示,即使是间接的)。因此,使用D3D11是可行的,但不像OP所要求的那样使用D3D9(或不是同样容易)。此外,这不仅仅是MSDN参考,我自己也使用了D3D11+MF,因此它的工作方式是有文档记录的。我需要在使用源代码读取器读取的视频帧上添加色度键效果。我发现这个API是由MS for Chroma Key提供的,所以我试图获取
ID2D1DeviceContext
。因此,如果我需要使用MS为色度键证明的API,我需要遵循什么方法。@Roman R。请注意,您发布的图像有些过时。D2D可以很好地与DX11配合使用(但还不能与DX12配合使用)。DXGI发展到1.5版等等。@VTT:你是对的,同时我认为图像给出了API互操作的正确想法(D2D和D3D11到DXGI之间的绿色箭头无论如何都会显示,即使是间接的)。因此,使用D3D11是可行的,但不像OP所要求的那样使用D3D9(或不是同样容易)。另外,它不仅仅是MSDN参考,我自己也使用了D3D11+MF,所以大家都知道它可以按照文档中的方式工作。Chromay键可以直接在IDirect3DDevice9上使用着色器来完成。如果你感兴趣,我已经做了,效果很好